The logged-out HarvestAPI alternative

Always logged out, numeric ids included, paid funds that never expire.

One logged-out posture Paid funds never expire one charge per success
HOW IT COMPARES

CrustAPI vs HarvestAPI

HarvestAPI is a genuinely capable tool, and by default it reads logged-out pages with no cookie. It also documents a bring-your-own-LinkedIn-account option, so a workflow can end up running data through your own logged-in session.

CrustAPI keeps one posture instead. There is no account option to switch on, so a session of yours is never part of a request. The other two differences are money: our paid funds never expire, and you only pay for a call that returns data.

Where they differCrustAPIHarvestAPI
Collection postureAlways logged-out public pages. No account option, so no login of yours is ever in a request.Logged-out with no cookie by default, plus a documented bring-your-own-LinkedIn-account option and account-based interaction endpoints.
Price per 1,000LinkedIn Profiles cost $4.00 per 1,000 profiles and Companies cost $3.00 per 1,000 companies at standard prices, down to $1.50 with larger deposits. Posts cost $6.00 per 1,000 successful requests at standard prices. Work email lookup is included. People with Full profiles uses that rate per full profile returned. Empty and inaccessible results are free. Paid funds never expire.$4 down to $2 per 1,000 for a main profile as volume grows, $6.40 down to $3.20 for a full profile, $20 down to $10 with email.
Balance expiryPaid funds never expire.Funds expire one year after purchase.
BillingPay per successful call. An empty or inaccessible profile is free.Priced per 1,000 records across tiers.

HarvestAPI figures are its own published tier prices as of August 2026, from the entry Starter tier down to the high-volume Business tier, where purchased funds expire one year later.

PULLED LIVE FROM THE API, AUGUST 12, 2026

A real response, not a mockup

This is the response from our dated example, trimmed for width. Current prices are listed below; a successful LinkedIn read uses the read rate.

curl "https://crustapi.com/v1/linkedin?type=profile&url=https://www.linkedin.com/in/brianchesky&companyId=true&schoolId=true&email=true" \ -H "x-api-key: YOUR_KEY"
// trimmed for width: photo, banner, company and school logos, duplicate // id fields, connectionsCount, parsed location detail, peopleAlsoViewed, // and this key's creditsRemaining removed { "type": "linkedin-profile", "url": "https://www.linkedin.com/in/brianchesky", "tookMs": 3549, "accessible": true, "profile": { "id": "brianchesky", "name": "Brian Chesky", "firstName": "Brian", "lastName": "Chesky", "headline": "Airbnb", "currentTitle": null, "currentCompany": "Airbnb", "companyState": "public", "about": "I am one of the founders and CEO of Airbnb.", "followerCount": 290361, "location": { "linkedinText": "San Francisco, California, United States, US" }, "experience": [ { "position": null, "companyName": "Airbnb", "companyLinkedinUrl": "https://www.linkedin.com/company/airbnb", "companyLinkedInId": "309694", "endDate": { "text": "Present" } } ], "education": [ { "schoolName": "Rhode Island School of Design", "schoolLinkedinUrl": "https://www.linkedin.com/school/risd1877", "schoolLinkedInId": "14891", "startDate": { "year": 1999 }, "endDate": { "year": 2004 } } ], "influencer": false, "topVoice": false, "website": "http://www.airbedandbreakfast.com", "memberIdentifier": "13378252", "publicIdentifier": "brianchesky", "linkedinUrl": "https://www.linkedin.com/in/brianchesky", "workEmail": "brian.chesky@airbnb.com", "emailStatus": "pattern-likely", "emailConfidence": null, "companyDomain": "airbnb.com" } }

Three fields do the work when you switch. companyLinkedInId and schoolLinkedInId are the numeric org ids from companyId=true and schoolId=true, so a name change never breaks the join. memberIdentifier is LinkedIn's permanent member id. When accessible is false, the call is free.

THE FULL RECORD

What data do you get?

The whole public record, structured the same way on every call, so your parser is written once and does not care which profile it reads.

Identityname · headline · location · photo · profile URLNumeric idscompanyId · schoolId · memberIdentifierWorkcurrent role · full experience history · company URLs · datesBackgroundeducation · schools · degreesSignalsabout · followerCount · influencer · topVoiceContactworkEmail with emailStatus, opt-in

Email is an opt-in field, not a separate product. Add email=true and the response appends workEmail and emailStatus (verified, pattern-likely, or unknown). Keep the confirmed addresses, treat the rest as guesses, and skip a with-email tier rate.

WHAT IT DOES NOT RETURN

Fields that only exist behind a login stay out, on purpose. Connection lists, mutual connections, and profile viewers never appear on the logged-out page, so they are not in the response. That boundary lets CrustAPI run with no accounts and nothing of yours at risk. A tool running on a logged-in session, including HarvestAPI's account-based path, can reach those fields, at that account's risk.

THREE STEPS

How do you get started?

From zero to your first profile JSON in about a minute:

  1. 1

    Create a free account. Try it free, no card needed.

  2. 2

    Copy your key from the dashboard. Signup issues one automatically.

  3. 3

    Run the curl above with any public profile URL. The JSON comes back with the ids in it.

Test it against a profile you already have
Try it free, no card.
Try for free
PRICING

How much does CrustAPI cost?

Each LinkedIn endpoint has its own rate and billing unit. Private or inaccessible profiles are free. Numeric IDs and optional email are included in the endpoint price.

DepositGoogle Search / 1,000 requestsMaps / 1,000 businessesLinkedIn Profiles / 1,000LinkedIn Companies / 1,000LinkedIn Posts / 1,000 requestsPeople, Jobs, Refresh / 1,000 units
$10+$1.00$1.96$4.00$3.00$6.00$1.96
$149+$0.76$1.49$3.00$2.50$4.50$1.49
$549+$0.56$1.10$2.50$2.00$3.30$1.10
$1,999+$0.41$0.80$2.00$1.75$2.45$0.80
$6,500+$0.33$0.65$1.75$1.60$1.95$0.65
$27,500+$0.28$0.55$1.60$1.50$1.65$0.55
$50,000+$0.26$0.50$1.50$1.50$1.50$0.50
$100,000+$0.20$0.40$1.50$1.50$1.50$0.40

Every eligible account gets $6 of free usage monthly. Each deposit keeps its prices until spent; paid funds never expire. People and Jobs bill per successful search, Refresh per accessible profile. Full profiles in People use the read rate per full profile. See all billing details.

Larger deposits unlock lower endpoint prices. Each deposit keeps its prices until spent. See the full deposit table on the pricing page. Prices in USD, ex-tax.

Funds are prepaid and never expire, unlike HarvestAPI funds that expire a year after purchase. Batch up to 100 profile URLs in one POST to keep a large database current without one round trip per row.

WHO IT'S FOR

Who uses CrustAPI?

Related: LinkedIn API · Proxycurl alternative · Bright Data LinkedIn alternative · Scrape LinkedIn without login

BEFORE YOU ASK

Common questions

HarvestAPI offers logged-out data and also documents account-based options. CrustAPI uses public logged-out pages without a customer LinkedIn account. Its standard price is $4.00 per 1,000 profiles with work email lookup included, and $3.00 per 1,000 companies. Larger deposits lower that price to $1.50, and paid funds never expire.

No. There is no account option to switch on. CrustAPI reads only the public, logged-out version of each page, so there is no cookie to paste and no login to hand over. HarvestAPI's default is also logged-out, but it documents an optional path that uses your own account for account-based endpoints. CrustAPI does not offer that path by choice.

No. CrustAPI paid funds are prepaid and never expire, so a pack you buy now is still usable a year later. On HarvestAPI, funds expire one year after purchase. For a workload that runs in bursts rather than steadily, that difference can matter more than the per-call price.

LinkedIn Profiles cost $4.00 per 1,000 profiles and Companies cost $3.00 per 1,000 companies at standard prices, down to $1.50 with larger deposits. Posts cost $6.00 per 1,000 successful requests at standard prices. Work email lookup is included. People with Full profiles uses that rate per full profile returned. Empty and inaccessible results are free. Paid funds never expire.

A profile call returns the public record as one clean JSON schema: name, headline, location, about, follower count, the full experience history with company URLs and dates, education, and stable identifiers. With companyId=true and schoolId=true you get the numeric org ids, memberIdentifier is LinkedIn's permanent numeric member id, and email=true appends workEmail with an emailStatus. Batch up to 100 URLs in one POST, billed the applicable price per successful row.

We read only public, logged-out pages and never use fake accounts or logins, and fields that exist only behind a login are deliberately excluded. A site's own terms may restrict automated access on their side. What you receive is data that is public for anyone to see.

WORKS WITH YOUR STACK

One posture, no expiry, one clean schema

Start free, no card needed. One GET returns the public profile as clean JSON with numeric ids, and a profile that is not accessible costs you nothing. No account of yours is ever part of the request.

Try for free
No credit card required