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

PlanPriceCreditsMax results per callAPI and MCP
Free$080, once at sign-up25No
Starter$39 / month1,200 a month50Included
Pro$69 / month2,800 a month100Included
Agency$129 / month5,000 a month200Included

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.

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.

EndpointCreditsNotes
POST /v1/serp1Includes the AI Overview and People Also Ask
POST /v1/keywords/ideas8.3Any limit up to your plan cap
POST /v1/keywords/suggest0.6, or 1.2 with expandAutocomplete from three engines
POST /v1/keywords/metrics4.2 to 8.3Scales with list size, 100 keywords = 8.3
POST /v1/keywords/trends3.8Up to 5 keywords compared over time
POST /v1/pages/audit0.6On-page audit, fetched by us
POST /v1/pages/sitemap0.6Up to 500 URLs
POST /v1/pages/crawl2.28 per page5 pages = 11.4 credits, 20 pages = 45.6
POST /v1/domains/overview4.2
POST /v1/domains/pages5.4
POST /v1/domains/keywords8.3
POST /v1/domains/competitors6.2
POST /v1/domains/keyword-gap16.5Head to head against one competitor
POST /v1/domains/backlinks8.3Summary figures for a domain
POST /v1/domains/backlinks-list9.3The individual links
POST /v1/domains/referring-domains9.3One row per linking domain
POST /v1/geo/prompt1.2One assistant answer with its sources
POST /v1/geo/brand-mentions28.8Brand mentions across assistant answers
POST /v1/geo/brand-questions28.8Up to 100 questions where the brand appears
POST /v1/geo/cited-pages28.8Up to 50 pages assistants cite about the brand
POST /v1/geo/keyword-volume3Up to 100 keywords in one call
POST /v1/social/instagram/profile0.71 + 0.57 per post12 posts = 7.6 credits
POST /v1/social/instagram/hashtag0.57 per post20 posts = 11.4 credits
POST /v1/social/tiktok/search1.14 per post20 posts = 22.8 credits
POST /v1/social/facebook/page2.34 per page1 page = 2.4 credits, 5 pages = 11.7
POST /v1/social/facebook/ads1.43 per ad10 ads = 14.3 credits
POST /v1/social/linkedin/posts0.57 per post searching, 1.43 from a profile20 posts = 11.4 or 28.5 credits
POST /v1/social/instagram/post0.6One post with media links
POST /v1/media/transcript1.8 (direct URL) or 2.3 (Instagram URL)Videos up to 25 MB
POST /v1/youtube/channel0.6Channel stats and its recent videos
POST /v1/youtube/transcript1.8Free when the video has captions we can read
POST /v1/youtube/search0.6
GET /v1/me, GET /v1/tools0

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.

Was this page helpful?