Skip to content

02 Get your data in /Integrations

Zapier

Send records from any of Zapier's apps to Dimension Labs with a Zap and the universal API, without running your own server.

  1. Z ZapierTickets, chats, calls, reviews
  2. ⟳ Your jobPull new · map fields · every 15 min
  3. { } Universal APIPOST /track · /trackhistorical
  4. Dimension LabsRead in full · enriched daily

Zapier connects to thousands of apps (Zapier’s app directory lists 9,000+ as of 2026-10-26). If a tool you use has a Zapier trigger, such as a new form response, review, ticket or spreadsheet row, a Zap can send each new record to the universal API. There’s no server to run: Zapier runs the Zap each time the trigger fires.

Zapier fits sources where one trigger event is one piece of customer text: a form or survey response, a review, a feedback submission, the first message of a ticket. For full multi-message conversations, or to load history, use the app’s own guide or Any other system, which pull every message in order.

  • A Zapier account. Code steps and their limits depend on your Zapier plan (Use JavaScript code in Zaps).
  • A Zapier trigger for your app that returns the customer’s text and a date.
  • A Dimension Labs API key for a new Universal API source. See Your API key.
  1. In the Zap editor, add the trigger for your app, for example a new response, new review or new row.
  2. Test it and check the sample record has three things: the customer’s text, an id for the record, and when it was written.

Use one source in Dimension Labs per app, so its data is easy to filter later.

Zapier’s own steps are in Use JavaScript code in Zaps.

  1. Click the + icon to add a step, then search for and select Code by Zapier.
  2. In the Code dropdown, choose JavaScript.
  3. Under Input Data, add these keys and map each to a field from your trigger:
KeyMap it toNotes
textthe customer’s wordsA review, an answer, a message.
recordIdthe record’s own idResponse id, review id, ticket id. Becomes sessionId.
customerIdyour internal customer id, if the trigger has oneOptional. Never an email address or name.
writtenAtwhen the record was writtenA date with a time zone works best, such as 2026-10-26T14:03:00Z.
apiKeyyour Dimension Labs API keyPaste it as text.
sourcethe app’s name, typed as textFor example jotform. Kept in platformJson.

Add any other fields you want to filter or join on later (a rating, a location id, a form name) as extra keys; the code puts every extra key into platformJson.

The code uses Zapier’s built-in fetch, and sends a message more than an hour old to /trackhistorical, as every guide does.

Paste this into the Code box:

// Code by Zapier (JavaScript). Sends one record to the Dimension Labs universal API.
const { text, recordId, customerId, writtenAt, apiKey, ...extra } = inputData;
const clean = (s) => String(s).replace(/:/g, '-'); // ids can't contain colons
if (!text || !text.trim()) {
output = { skipped: 'no text' };
} else {
const ts = Date.parse(writtenAt);
if (Number.isNaN(ts)) throw new Error(`Can't read the date "${writtenAt}". Map a date with a time zone.`);
const sessionId = clean(`${extra.source || 'zapier'}-${recordId}`);
const message = {
text,
userId: customerId ? clean(customerId) : sessionId,
incoming: true,
sessionId,
conversationId: sessionId,
dimensionlabs_timestamp: ts,
platformJson: extra,
};
const endpoint = Date.now() - ts > 60 * 60 * 1000 ? 'trackhistorical' : 'track';
const url = `https://tracker.dimensionlabs.io/${endpoint}?platform=universal&v=11.1.0-rest&type=incoming&apiKey=${encodeURIComponent(apiKey)}`;
const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(message) });
if (!res.ok) throw new Error(`Dimension Labs returned ${res.status}: ${await res.text()}`);
output = { sent: sessionId, endpoint };
}

JSON.stringify escapes quotes and line breaks in the customer’s text, which is why this guide uses a code step rather than typing the JSON by hand: a review with a quotation mark in it would break hand-typed JSON.

Click Run Code to test it. A result with sent means the message reached Dimension Labs.

  • Publish the Zap. Each new record is sent as it arrives, to /track, and is enriched automatically every day.
  • If Zapier sees a record late (more than an hour after it was written), the code sends it to /trackhistorical. Run a backfill from the Backfill tab to enrich those.
  • History: Zaps only see new records. Export your history from the app and upload a file (check it with the file checker), then run a backfill.
  • Re-runs are safe: if Zapier replays a run, duplicates are removed automatically.

Personal data. Don’t map email addresses, names or phone numbers into any key: every extra key is sent as platformJson. Redact the text if customers include personal details. See PII redaction.

If the trigger returns a whole conversation (a ticket with replies, a chat transcript), each message needs its own POST, in order, at least one second apart, with replies from your side marked incoming: false and type=outgoing. That is easier and more reliable in a script: see the app’s guide, or Any other system.

Checked against Zapier’s documentation on 2026-10-26.