Schubert, T., Friedmann, F., & Regenbrecht, H. (2001). The experience of presence: Factor analytic insights. Presence: Teleoperators & Virtual Environments, 10(3), 266-281.
Igroup Presence Questionnaire (IPQ)
Assess Spatial Presence (SP), Involvement (INV), Experienced Realism (REAL), and General Presence (G1).
Instrument version, scoring, and data handling
Version: Full 14-item Igroup Presence Questionnaire using a seven-point response scale.
Scoring: Reports General Presence, Spatial Presence, Involvement, and Experienced Realism using the published item groupings.
Data handling: CSV mode creates a file only on this device; the portfolio server does not receive the response. Google Sheets mode sends the participant ID, condition, item responses, calculated scores, tool name, sheet/tab name, and timestamp to the Google Sheet Web App URL entered by the researcher. Nothing is sent until the final save action. Completion is shown only when that script returns JSON with success: true (or ok: true) after appending the row.
Step 1 Select Data Save Option
💡 How to connect your Google Sheet (10-second setup)
- Create or open your target Google Sheet.
- Click Share (top right) → under General access, change to Anyone with the link can edit.
- Copy the Google Sheet link from your browser address bar and paste it into the input box above!
Advanced: Using a custom Google Apps Script deployment
If you prefer to deploy your own private script instead of sharing your sheet link, copy the script below, deploy it as a Web App (access: Anyone), and paste your /exec URL above:
function doPost(e) {
var lock = LockService.getScriptLock();
lock.tryLock(10000);
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var data = JSON.parse(e.postData.contents);
var rowsToAppend = [];
var sheetName = "Sheet1";
if (Array.isArray(data)) {
rowsToAppend = data;
} else if (data && Array.isArray(data.rows)) {
sheetName = data.sheetName || "Sheet1";
rowsToAppend = data.rows;
} else if (data) {
sheetName = data.sheetName || "Sheet1";
var obj = {};
for (var k in data) { if (k !== 'sheetName') obj[k] = data[k]; }
rowsToAppend = [obj];
}
if (rowsToAppend.length === 0) return ContentService.createTextOutput(JSON.stringify({ success: false })).setMimeType(ContentService.MimeType.JSON);
var sheet = ss.getSheetByName(sheetName) || ss.insertSheet(sheetName);
var keys = Object.keys(rowsToAppend[0]);
if (sheet.getLastRow() === 0) sheet.appendRow(keys);
rowsToAppend.forEach(function(r) {
sheet.appendRow(keys.map(function(k) { return (r[k] !== undefined && r[k] !== null) ? r[k] : ""; }));
});
return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({ success: false, error: err.toString() })).setMimeType(ContentService.MimeType.JSON);
} finally {
lock.releaseLock();
}
}This URL is remembered only in this browser on this device.