Pricing & credits
Flat per-request credits. Empty rows are free. No annual commit.
LinkFetch is metered in credits. Pricing is flat per request — a call returning one row and a call returning fifty rows cost the same. We never debit per result and never split a single request into multiple billing units.
Credit cost per endpoint
| Endpoint | Credits | Notes |
|---|---|---|
GET /v1/profiles | 5 | One profile, typed and provenance-stamped |
GET /v1/profiles/:slug/posts | 3 | Recent activity for one person |
POST /v1/profiles/ingest | 5 | Extension write-path; same cost as the read |
GET /v1/companies/:slug | 3 | One company record |
GET /v1/companies/by-id/:id | 3 | Same shape, addressed by numeric ID |
GET /v1/companies/:slug/posts | 3 | One page of the company timeline |
GET /v1/companies/:slug/employees | 5 | Flat per page, not per employee |
GET /v1/posts/:id | 3 | One post + counts + reaction breakdown |
GET /v1/posts/:id/reactions | 2 | One page of reactors |
GET /v1/groups/:id | 3 | One group |
GET /v1/groups/:id/members | 3 | One page of members |
GET /v1/search/people | 5 | Flat per query, not per hit |
GET /v1/search/companies | 3 | Same |
GET /v1/search/groups | 2 | Same |
GET /v1/search/posts | 2 | Same |
GET /v1/jobs | 1 | One filtered page from our dataset |
GET /v1/jobs/:id | 1 | One job detail row |
GET /v1/jobs/by-url | 1 | Same |
GET /v1/locations/search | 1 | Geo-id resolution |
POST /v1/outbound/connections | 10 | LinkedIn-side weekly cap; high-risk |
POST /v1/outbound/messages | 10 | Same; 1st-degree only |
POST /v1/outbound/posts/:id/reactions | 5 | Public engagement |
POST /v1/outbound/posts/:id/comments | 5 | Same |
POST /v1/outbound/follows/member | 5 | Same |
POST /v1/outbound/follows/company | 5 | Same |
POST /v1/outbound/posts/:id/save | 2 | Self-state change |
| Empty response | 0 | Zero rows are never charged |
These are list prices; Scale-tier customers get custom bands. The
meta.credits_charged field on every response is authoritative — read
it instead of hardcoding.
Why "flat per request"
Per-result billing breaks two things you actually want:
- Predictable cost in agent loops. An agent that runs a search and iterates through 50 hits should pay the same as one that gives up after 5 — otherwise your bill swings on the model's reasoning step.
- Honest cache pricing. Cache hits cost the same as cache misses, because if cache hits were cheaper, the incentive is to depend on stale data. The right answer is to charge once and let you cache yourself if you don't need fresh.
Empty rows are free
If a profile URL resolves to no data, or a search returns zero hits, we don't charge. This is contractual — if you're getting charged for 404s, email info@linkfetch.io and we'll refund plus double the difference.
How credits are debited
Per-request, atomically, in a Postgres transaction alongside the cache write. The response includes:
meta.credits_charged— the integer cost of this callX-Credits-Remainingheader — your balance after the call- A row in
credit_ledger— visible on the usage page
Insufficient balance returns 402 insufficient_credits with a link to
top up; we never silently overdraft.
Tiers
| Tier | Price | What you get |
|---|---|---|
| Free | $0 | $5 credit (≈1,000 jobs lookups), 1 req/sec, community support |
| Starter | $29/mo | ~6,000 lookups, 10 req/sec, email support |
| Pro | $99/mo | ~25,000 lookups, 50 req/sec, webhooks, GDPR + CCPA posture |
| Scale | Custom | Custom throughput, private MCP cluster, DPA, SSO, invoice |
Full table at linkfetch.io/#pricing.
Subscriptions (Jobs dataset)
The Jobs dataset is also available as a separate flat-rate SKU for teams that want bulk access:
- Monthly Snapshot — $49, one-off, last 30 days
- Subscription — $89/mo, real-time webhooks + daily + monthly rollups
- Custom — historical backfill + DPA, talk to us
Details at linkfetch.io/datasets/jobs.
Billing
Credits and subscriptions are processed by Paddle as Merchant of Record. Upgrade, downgrade, or cancel any time on the billing page. Refunds on cancellation are pro-rated to the day.