Skip to content

SatisMeter

SatisMeter collects in-app NPS, CSAT and CES survey responses.

ingestr supports SatisMeter as a source.

URI format

satismeter://?api_key=<api_key>&project_id=<project_id>

Both parameters are required:

  • api_key — created in the SatisMeter UI under Settings → Integrations → API. The key is scoped to a single project.
  • project_id — the project the key belongs to. Every endpoint is nested under /projects/{projectId}, so it cannot be inferred from the key.

Tables

TableDescription
responsesIndividual survey responses: the answer payload, the responding user, device, location, language, referrer and a created timestamp.
campaignsThe surveys defined in the project — id, name, type (nps / csat / …) and state.
projectProject metadata: name, default language, branding.

responses is loaded incrementally on its created timestamp. campaigns and project are small snapshots that are re-fetched in full and de-duplicated on id; neither tracks deletions, so a survey removed in SatisMeter remains in the table.

Nested objects (answers, user, device, location) are passed through as JSON rather than flattened.

A note on date ranges

SatisMeter's responses endpoint defaults to the last 30 days when no start date is supplied. ingestr always sends an explicit start date, so a run without --interval-start fetches the full history rather than silently returning a month. Pass --interval-start / --interval-end to narrow it.

Personal data

Response records embed the respondent's email, name, user id and the full custom trait bag exactly as SatisMeter returns them. Treat the destination table as containing personal data.

Example

sh
ingestr ingest \
  --source-uri 'satismeter://?api_key=sm_abc123&project_id=5bb480aaebf3ed0004c6f3dd' \
  --source-table 'responses' \
  --dest-uri duckdb:///satismeter.duckdb \
  --dest-table 'dest.responses'