VisionAtlas — Navigate Performance With Clarity

Help center

VisionAtlas product documentation

Try demoSign in

Performance

Connect with Zapier

Step-by-step Zapier setup to push KPI actuals into VisionAtlas using Webhooks by Zapier and a company API key.

VisionAtlas does not have an official Zapier app. You connect Salesforce, HubSpot, ERP, or spreadsheets with Webhooks by Zapier (or any tool that can POST JSON, such as Make).

This path updates KPI actuals only. It cannot create weekly updates, observations, or official department weeks. It is not the Outlook/Teams mailbox connection — see Outlook, Teams, and Mail.

System recipes: Salesforce, HubSpot, ERP and accounting.

Prerequisites

  1. A plan with API access (Intelligence and above)
  2. A company administrator account
  3. At least one KPI with Integration mapping set on the KPI detail page, or the internal KPI id from GET /api/v1/kpis
  4. A Zapier account (or Make / similar)

Create an API key

  1. Open Settings → Integrations
  2. Create a company API key (default scopes include kpi:write and kpi:read)
  3. Copy the token immediately. It starts with va_live_ and is shown once

Store the key in Zapier as a secret. Do not put it in a spreadsheet or a shared chat.

Map each KPI

On the KPI detail page, set Integration mapping:

FieldExample
External source`Salesforce`, `ERP`, `PowerBI`, `API`, or `Other`
External metric idA stable id you control, such as `PIPELINE_USD`

The source and metric id in your Zap must match this mapping exactly. If you prefer not to map, send kpiId instead (the id in the KPI detail URL).

Build the Zap

  1. In Zapier, create a Zap
  2. Choose a trigger: Schedule (for a weekly or monthly pull) or your source app (Salesforce, HubSpot, Google Sheets)
  3. Add an action: Webhooks by Zapier → Custom Request
  4. Method: POST
  5. URL: https://your-tenant.visionatlas.app/api/v1/kpi-values (use your real VisionAtlas host)
  6. Headers:

- Authorization: Bearer va_live_... - Content-Type: application/json

  1. Data / body: JSON with a values array (see below)

If Zapier only offers POST (not Custom Request), set payload type to JSON and map the same fields.

Sample body

{
  "values": [
    {
      "externalSource": "ERP",
      "externalMetricId": "NET_REVENUE_USD",
      "asOfDate": "2026-07-01",
      "actualValue": 1250000,
      "targetValue": 1200000
    }
  ]
}

You may send kpiId instead of externalSource + externalMetricId. Use asOfDate for any date inside the reporting period, or periodStart for the exact period start. You can send up to 500 rows per request.

Optional: webhook ingest instead of an API key

If you do not want a company API key in Zapier, create a Webhook ingest integration under Settings → Integrations. Copy the vi_ingest_... secret (shown once) and POST to:

POST /api/v1/ingest/kpi-values
Authorization: Bearer vi_ingest_...
Content-Type: application/json

The JSON body is the same values array.

What you should see

After the first successful run:

  • The KPI current value on the KPI detail page updates for that period
  • Settings → Integrations shows an import job (importJobId in the response)
  • Dashboard health reflects the new actual

If nothing changes, open the Zap run history and the VisionAtlas import job. The usual causes are a mismatched metric id, a date outside the KPI frequency, or a conflict with a manual edit.

Response fields

FieldMeaning
`totalSuccess`Values written
`totalSkipped`Rows skipped (validation or manual precedence)
`totalConflicts`Rows queued for admin review
`totalErrors`Rows that failed
`importJobId`Id of the import run

Manual KPI edits win over automation for the same period unless an admin accepts the queued conflict in Settings → Integrations.

Write requests are limited to 60 per minute per company. Batch rows in one request instead of firing a Zap per cell.

Optional: send VisionAtlas events into Zapier

To notify another system when a KPI actual changes, create an outbound webhook under Settings → Integrations and point it at a Zapier Catch Hook.

Events you can subscribe to: kpi.value.updated, kpi.health.changed, initiative.health.changed.

VisionAtlas POSTs a signed JSON body with headers X-VisionAtlas-Signature, X-VisionAtlas-Timestamp, and X-VisionAtlas-Event. Use this only if you need a downstream step; it is not required to load actuals.