VAMPIREAI

Connect

Send your own numbers

One request, a token and a number. Anything that can make an HTTP call can put a metric on a board — a cron job, a warehouse query, a Zapier step, a Metabase alert, a CI run, twelve lines of Python. No OAuth screen, no review process, no waiting on a vendor.

The whole integration

curl -X POST 'https://YOUR-PROJECT.supabase.co/rest/v1/rpc/ingest_metric' \
  -H 'apikey: YOUR_PUBLISHABLE_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "p_token": "vai_...",
    "p_metric": "gsc.clicks",
    "p_value": 1487,
    "p_department": "SEO & Content",
    "p_unit": "clicks",
    "p_cadence": "1 day"
  }'

That is the entire thing. The first send creates the metric and files it on the board you named; every send after that adds a point to it. Send the same timestamp twice and the later value replaces the earlier one, so a job that restates yesterday’s figure corrects it rather than duplicating it.

Every argument

ArgumentWhenWhat it is
p_tokenrequiredThe ingest key. Issued once, stored as a digest, revocable.
p_metricrequiredA stable key you choose: gsc.clicks, meta.spend, stripe.mrr.
p_valuerequiredThe number.
p_atdefaults to nowWhen the reading is for. Send the same timestamp twice and the second replaces the first.
p_dimsdefaults to {}Anything you want to slice by later: {"campaign":"brand","country":"US"}.
p_namefirst send onlyWhat a person should see. Defaults to the key.
p_departmentfirst send onlyWhich board it lands on — Paid Media, SEO & Content, Social, Revenue.
p_unitfirst send only$, clicks, %, whatever it is measured in.
p_cadenceoptionalHow often this number should arrive. Sending it turns on silence detection.

Turning on silence detection

Send p_cadence once and the number is watched for silence from then on: if it stops arriving, that is an incident with a person attached rather than a gap somebody notices next month. Leave it out and nothing is assumed. We do not infer a schedule from the first two points, because paging someone at three in the morning about a cadence they never declared is exactly how a team learns to mute the channel.

A number arriving on time is only half the check. A cost per acquisition through its guardrail, a goal off pace, or two sources disagreeing about the same figure all work on anything sent this way — none of those care where the number came from. That is the difference between this and landing page monitoring, which is the one check that has to go and look at something itself.

About the key

A key is shown once and never shown again — we store a SHA-256 digest of it and nothing else, so nobody at this end can read it back to you, which also means nobody can be talked into reading it back to somebody else. Take one per system, so a leak is one revocation rather than a migration. Revoking is immediate.

You mint your own, in the app: Sources → Send your own numbers. Name it after whatever will use it, copy it once, revoke it from the same screen. What is still done by hand is getting the account in the first place — we are onboarding a handful at a time, so ask for a slot and say what you want to send.

The key authorises writing one organisation’s numbers and nothing else. It cannot read a metric back, list your other keys, or see anything at all — a stolen ingest key can add wrong data to a board, which is worth revoking over, and cannot take anything out.

Easier to look at than to read about.

Open the demo →