What costs what
| Request | Credits |
|---|---|
GET /v1/apps/{slug}/companies |
1 per store in the page |
GET /v1/companies/{domain} |
1 per store found; include=history adds 1 |
GET /v1/events |
1 per distinct store in the page |
POST /v1/webhooks |
10 per change delivered; creating, listing and testing are free (Webhooks) |
GET /v1/apps/{slug}/companies/count |
Free |
GET /v1/apps, GET /v1/industries, GET /v1/usage, GET /v1/pricing |
Free |
GET /v1/pricing returns this table as JSON, with no key.
Rules
- Charged only for stores found. An empty page or an error costs nothing.
- Re-pulls are free for 7 days. The same store for the same kind of request (a row from the same app's list, a lookup, or history) is free again within 7 days;
meta.freeRepullscounts them. Scans are weekly, so a re-pull inside that window returns the same data. - Counts are free and unlimited, so narrow a query before you pay for rows.
- Store lookups that miss (
404) are free up to 2 × your lookups that found a store in the last 30 days + 100, then cost 1 credit each. - A page the balance cannot fully cover is cut to the rows you can pay for;
pagination.nextCursorresumes after the last one. - Credits expire after 12 months. Each credit expires 12 months after it was added, and the oldest are spent first. They are non-refundable and not transferable.
Seeing what you spent
Every response carries:
| Header | Body | Meaning |
|---|---|---|
X-Credits-Charged |
meta.creditsUsed |
Credits this request cost |
X-Credits-Remaining |
meta.creditsRemaining |
Balance afterwards (null for unlimited keys) |
meta.freeRepulls |
Stores served free as re-pulls |
GET /v1/usage shows the balance and the last 30 days by endpoint.
Packs
| Credits | Price | $ per 1,000 stores | Pack id (API) |
|---|---|---|---|
| 500 | $50 | $100 | starter |
| 2,500 | $150 | $60 | growth |
| 10,000 | $400 | $40 | pro |
| 40,000 | $1,000 | $25 | scale |
A company email gets up to 50 free credits: 25 at sign-up, 25 when the email is verified (once per company domain). Webmail gets none. Buy on your account page (Stripe Checkout). Auto top-up, off by default, rebuys a chosen pack on the saved card when the balance runs low. Full detail: Pricing.
Limits
Per account per rolling 30 days: 40,000 distinct stores (402 usage_cap_reached) and $1,000 of purchases (402 spend_cap_reached). For more, talk to us.
Running out
A billed request the balance cannot cover answers 402 insufficient_credits and charges nothing. The error carries offers, so a script or agent can act on it:
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this request (balance 0). Buy a credit pack, or turn on auto top-up.",
"requestId": "6f1c2a9e-4b7d-4e2a-9c51-0d3b8e7f2a14",
"balance": 0,
"offers": {
"pack": { "id": "starter", "name": "Starter", "priceUsd": 50, "credits": 500, "buyUrl": "https://installgraph.com/account?buy=starter" },
"talkToUs": { "url": "https://installgraph.com/talk-to-us", "for": "More than $1,000 or 40,000 stores in 30 days, the full dataset, or a changes feed." },
"pricing": "https://installgraph.com/pricing"
}
}
}
Either send a person to offers.pack.buyUrl, or, if the account owner has turned on agent purchases, buy with POST /v1/billing/purchase.