Business goals and conversions

Set a revenue or conversion target for a quarter, name the events that count as conversions, and add ad spend for return on spend.

Embed
Preview of the card
<a href="https://hermeticor.com/guides/business-goals"><img src="https://hermeticor.com/guides/_api/public/orgs/5fcd8b3c-a27c-4688-972f-de710125592f/spaces/9a3da731-ded5-4536-b84f-8c9a61420ff4/pages/f6637cd2-18f5-445d-bc33-1a004ecf076e/social-card.svg?v=3e7ae33eec8b" alt="Business goals and conversions" width="600" height="315"></a>

A business goal is a target for a date range, such as new revenue this quarter. Hermeticor tracks progress from the conversions it records.

What you need first

  • Events from your app for the things that count, such as an upgrade (see Track events).

  • A key with analytics:read, plus settings:write for conversion labels, campaigns:write for goals and integrations:write for ad spend.

1. Name your conversions

Tell Hermeticor which events are conversions, and which property holds their value:

curl -s -X POST "$BASE/v1/analytics/conversion-labels/bulk-create" \
  -H "Authorization: Bearer $HERMETICA_API_KEY" -H "Content-Type: application/json" \
  -d '{"items":[
    {"label":"workspace_activated","event":"Connected provider","folder":"Activation"},
    {"label":"paid_plan","event":"Upgraded plan","valueProperty":"mrr_minor","folder":"Revenue"}]}'

Each event can have one label. GET /v1/analytics/attribution/settings shows how conversions are credited to campaigns and journeys.

2. Set a goal

curl -s -X POST "$BASE/v1/business-goals" \
  -H "Authorization: Bearer $HERMETICA_API_KEY" -H "Content-Type: application/json" \
  -d '{"name":"Q4 2026: $15k new MRR","metric":"revenue","targetValue":1500000,"currency":"USD",
       "startsOn":"2026-10-01","endsOn":"2026-12-31"}'
  • metric is revenue or conversions.

  • Revenue is in minor units: 1500000 is $15,000.00. A revenue goal needs a currency.

  • The end date cannot be before the start date.

3. Watch progress

curl -s "$BASE/v1/business-goals" -H "Authorization: Bearer $HERMETICA_API_KEY"

Each goal shows progress and percent. Change the target with PATCH /v1/business-goals/<id> {"targetValue":2000000}.

When the quarter is over, archive it: POST /v1/business-goals/batch/archive {"ids":["<goalId>"]}. batch/restore brings it back.

4. A target per conversion

curl -s -X PUT "$BASE/v1/analytics/conversion-labels/paid_plan/target" \
  -H "Authorization: Bearer $HERMETICA_API_KEY" -H "Content-Type: application/json" \
  -d '{"targetMinor":1500000}'

curl -s "$BASE/v1/analytics/conversion-labels/paid_plan/metrics?from=2026-10-01&to=2026-12-31" \
  -H "Authorization: Bearer $HERMETICA_API_KEY"

5. Add ad spend

To see return on ad spend next to your conversions, import what each ad campaign cost per day:

curl -s -X POST "$BASE/v1/ad-spend/import" \
  -H "Authorization: Bearer $HERMETICA_API_KEY" -H "Content-Type: application/json" \
  -d '{"rows":[{"platform":"linkedin","campaignKey":"li-agencies-q4","campaignName":"LinkedIn: agencies",
       "day":"2026-10-15","spendMinor":42000,"currency":"USD","impressions":18000,"clicks":210}]}'

curl -s "$BASE/v1/ad-spend/report?from=2026-10-01&to=2026-10-31&groupBy=campaign" -H "Authorization: Bearer $HERMETICA_API_KEY"

Importing the same platform, campaign and day again updates that row: spend and currency are replaced, and impressions, clicks and campaignName change only when you send them. Remove a range with DELETE /v1/ad-spend?platform=linkedin&from=2026-10-01&to=2026-10-31.

Next: Reports and dashboards.

Updated