Credits and pricing
Every call is paid for in credits from your Pengu Insights account, the same balance the app uses. There is no separate API subscription and nothing to set up: a key spends the credits of the account that created it.
What a credit is
A credit is the unit the whole product is priced in. Plans include a monthly allowance, and each tool costs a fixed number of credits that reflects what the underlying data actually costs to produce. Cheap lookups cost half a credit; a full keyword export of a domain costs five.
The API tells you the price of every call in two places: the meta object of every successful response, and the X-Credits-Charged and X-Credits-Remaining response headers, so you can meter usage without parsing the body.
meta on every response
{
"data": { "...": "..." },
"meta": {
"credits_charged": 2.5,
"credits_remaining": 497.5,
"request_id": "e701ba5b-5985-43e2-9720-5c3f342dd64f"
}
}
Plans
| Plan | Price | Credits | Max results per call | API and MCP |
|---|---|---|---|---|
| Free | $0 | 80, once at sign-up | 25 | No |
| Starter | $39 / month | 1,200 a month | 50 | Included |
| Pro | $69 / month | 2,800 a month | 100 | Included |
| Agency | $129 / month | 5,000 a month | 200 | Included |
Prices exclude VAT. The API and the MCP server are part of every paid plan. On Free you can still revoke keys you created earlier, but not create new ones, and requests with an existing key return 403 plan_required.
Annual billing gives two months free. Paid plans get their credits each month and they reset at the start of each billing period. "Max results per call" caps the limit and posts parameters: ask for 100 keywords on Starter and you get 50, with the price unchanged, so pick the plan by how deep you need to go rather than by how many calls you make.
Change plan in the app under Settings » Billing. Upgrades apply immediately and the new allowance is available to your keys straight away.
Price per endpoint
SEO endpoints are a flat price per call whatever limit you pass. Social, crawl and LinkedIn endpoints scale with how many results you ask for, because that is what drives the cost of collecting them. Prices are rounded up to the next tenth of a credit.
The API and the MCP server cost more per call than the same data costs inside the app, and the search endpoints carry a further premium on top. A person clicking a button runs one search and reads it. An agent given the same tools runs forty while answering a single question, because that is what makes it useful, and search is the data it burns fastest. The volume is the point of the API, and it is priced for it. Endpoints that cost us nothing to run are the exception: they stay near the floor whatever you do with them.
Recalibrated on 20 September 2026 against real usage. One rule now covers every endpoint: the price is twice what the call costs us, so a credit always buys the same amount of data wherever you spend it. Plan allowances went up at the same time.
| Endpoint | Credits | Notes |
|---|---|---|
POST /v1/serp | 1 | Includes the AI Overview and People Also Ask |
POST /v1/keywords/ideas | 8.3 | Any limit up to your plan cap |
POST /v1/keywords/suggest | 0.6, or 1.2 with expand | Autocomplete from three engines |
POST /v1/keywords/metrics | 4.2 to 8.3 | Scales with list size, 100 keywords = 8.3 |
POST /v1/keywords/trends | 3.8 | Up to 5 keywords compared over time |
POST /v1/pages/audit | 0.6 | On-page audit, fetched by us |
POST /v1/pages/sitemap | 0.6 | Up to 500 URLs |
POST /v1/pages/crawl | 2.28 per page | 5 pages = 11.4 credits, 20 pages = 45.6 |
POST /v1/domains/overview | 4.2 | |
POST /v1/domains/pages | 5.4 | |
POST /v1/domains/keywords | 8.3 | |
POST /v1/domains/competitors | 6.2 | |
POST /v1/domains/keyword-gap | 16.5 | Head to head against one competitor |
POST /v1/domains/backlinks | 8.3 | Summary figures for a domain |
POST /v1/domains/backlinks-list | 9.3 | The individual links |
POST /v1/domains/referring-domains | 9.3 | One row per linking domain |
POST /v1/geo/prompt | 1.2 | One assistant answer with its sources |
POST /v1/geo/brand-mentions | 28.8 | Brand mentions across assistant answers |
POST /v1/geo/brand-questions | 28.8 | Up to 100 questions where the brand appears |
POST /v1/geo/cited-pages | 28.8 | Up to 50 pages assistants cite about the brand |
POST /v1/geo/keyword-volume | 3 | Up to 100 keywords in one call |
POST /v1/social/instagram/profile | 0.71 + 0.57 per post | 12 posts = 7.6 credits |
POST /v1/social/instagram/hashtag | 0.57 per post | 20 posts = 11.4 credits |
POST /v1/social/tiktok/search | 1.14 per post | 20 posts = 22.8 credits |
POST /v1/social/facebook/page | 2.34 per page | 1 page = 2.4 credits, 5 pages = 11.7 |
POST /v1/social/facebook/ads | 1.43 per ad | 10 ads = 14.3 credits |
POST /v1/social/linkedin/posts | 0.57 per post searching, 1.43 from a profile | 20 posts = 11.4 or 28.5 credits |
POST /v1/social/instagram/post | 0.6 | One post with media links |
POST /v1/media/transcript | 1.8 (direct URL) or 2.3 (Instagram URL) | Videos up to 25 MB |
POST /v1/youtube/channel | 0.6 | Channel stats and its recent videos |
POST /v1/youtube/transcript | 1.8 | Free when the video has captions we can read |
POST /v1/youtube/search | 0.6 | |
GET /v1/me, GET /v1/tools | 0 |
GET /v1/tools returns this table as JSON, with the input schema of every tool, so a client can show prices before making a call.
Refunds
A call is charged before the data is fetched, so an account can never run past its balance. If the call then fails for any reason on our side, including a timeout or a data source returning nothing, the exact amount is refunded in the same request and the error body says so. Only successful responses cost credits.
Validation errors (400) are checked before anything is charged. A 404 not_found, for example a domain with no organic presence in the chosen country, is also refunded.
Daily cap per key
Every key has a daily credit cap, set when the key is created to a fifth of your plan's monthly credits (560 a day on Pro, 1,400 on Agency). It exists so an automation with a bug cannot spend the whole month in an afternoon. Raise it, lower it or remove it per key in Settings » Developers; the counter resets at 00:00 UTC.
When a call would push a key past its cap you get a 429 daily_cap_reached with the cap, today's spend and the reset time, and nothing is charged. Every successful response also carries meta.daily with the same three numbers, so a client can slow down before hitting the wall.
meta.daily on every response
{
"meta": {
"credits_charged": 2.5,
"credits_remaining": 497.5,
"daily": { "used": 38.5, "cap": 240, "resets_at": "2026-09-10T00:00:00.000Z" }
}
}
Running out
When a call would cost more than you have left you get a 402 with the amount required and your remaining balance, and nothing is charged.
402 insufficient_credits
{
"error": {
"code": "insufficient_credits",
"message": "This call costs 9 credits and your balance is 4.5.",
"details": { "required_credits": 9, "remaining_credits": 4.5 }
},
"request_id": "..."
}
Check GET /v1/me before a batch job, or read X-Credits-Remaining on each response and stop when it gets low.
