v1 · stable Read-only dataset · no live scraping

LinkedIn Data API

Search 680M+ people and 102M+ companies from our LinkedIn dataset. Size a segment for free, then pay only for the profiles you actually receive. Misses and errors are never charged.

Open the API console Read the reference
No SDK required — plain HTTPS + JSON. Keys are prefixed wa_live_ / wa_test_.
curl works in the console too
# 1. Size the segment (free)
curl https://webautomation.io/v1/person/count \
  -H "Authorization: Bearer wa_live_…" \
  -H "Content-Type: application/json" \
  -d '{"filters": {"country": "united states",
                  "department": "Sales",
                  "title_prefix": "director"}}'

# 2. Pull the first page (billed per profile)
curl https://webautomation.io/v1/person/search \
  -H "Authorization: Bearer wa_live_…" \
  -H "Content-Type: application/json" \
  -d '{"filters": {"country": "united states",
                  "department": "Sales"},
       "per_page": 25}'
680M+
people profiles, worldwide coverage
102M+
company profiles with domain + LinkedIn URL
Per profile
pay only for results — counting is always free
5
endpoints, one response envelope
Quickstart

Three calls to your first list

01
Create a key
Account Settings → API Keys. The full key is shown exactly once — store it safely. Send it on every request as Authorization: Bearer <key>.
02
Count before you pay
person/count is free and returns the exact segment size for any filter set, so you know the maximum bill before you run it.
03
Search, then page
person/search bills per profile returned, at your plan's rate. Every response carries credits_used and credits_remaining.
Pricing & credits

One credit, one profile. Nothing else.

EndpointCostWhen
GET /v1/accountFreeAlways
POST /v1/person/countFreeAlways · cached ~5 min
POST /v1/person/searchCharged per profile actually returned
GET /v1/company/enrichOnly on a match · a miss is a free 404
GET /v1/company/employeesCharged per profile actually returned
Any error responseFreeErrors are never charged

Paid calls are pre-authorised at per_page and charged for what actually comes back — the difference is refunded automatically. The standard rate is 1 credit per profile or match; your plan's exact per-call costs are always visible in /v1/account under costs. Credits are shared with your WebAutomation account balance; your plan may include an API credit allowance, and you can top up any time on the pricing page. Check your balance live via /v1/account or your dashboard.

Rate limits

Limits by plan, headers on every response

Every key is rate-limited per minute and per day according to your plan — read your own limits from /v1/account, and the live state from the X-RateLimit-* headers present on every response. Exceeding a limit returns 429 with a Retry-After header telling you exactly how long to back off. Upgrading your plan raises the ceiling.

# Present on every /v1 response
X-RateLimit-Limit:     60
X-RateLimit-Remaining: 57
X-RateLimit-Reset:     1756900000
Retry-After:           12   # 429 only
Filters

Match exactly, by prefix, or by range

Match typeKeysExample
Exact country state city location title seniority seniority_level functional_area industry first_name last_name name linkedin_url "country": ["united kingdom", "ireland"]
Prefix title_prefix headline_prefix location_prefix name_prefix industry_prefix "title_prefix": "director"
Range connections_min connections_max followers_min followers_max "connections_min": 500
Special company_linkedin_url (company URL or slug) · department (case-insensitive, 20 canonical values) "department": ["Sales", "Marketing"]

Array values are OR within a key; separate keys are AND. Unknown keys return 422 with the full list of valid filters. Departments: Administrative, C-Suite, Consulting, Customer Service, Design, Education, Engineering and Technical, Finance & Accounting, Human Resources, Legal, Marketing, Medical, Operations, Other, Product, Project Management, Real Estate, Research, Sales, Trades.

Response envelope & errors

One shape, every response

{
  "status":            false,
  "detail":            [ "Unknown filter(s): dept. Valid: …" ],
  "result":            null,
  "credits_used":      0,
  "credits_remaining": 4877
}

# Same envelope for every status code,
# success and error alike.
CodeMeaning
401Missing or invalid key. Send Authorization: Bearer wa_…. Revoked keys fail within minutes.
402Not enough credits for this call — rejected before any work runs. Lower per_page or top up.
404Company miss on enrich/employees (free).
422Invalid filter or body — detail lists the valid filters.
429Rate limit hit — honour Retry-After.
500Our fault, never charged. Retry, or contact support.
Resources

Get started faster

Postman collection
All endpoints with ready-made example requests. Download the collection, or in Postman use Import → Link and paste that URL. Then set the api_key collection variable to your key.
API console
Exercise every endpoint from the browser with your real key — open the console. Billable endpoints charge real credits.
Reference (ReDoc)
The same specification as a readable reference — open the reference.
OpenAPI 3.0 spec
Machine-readable spec for codegen and tooling: /wapi/linkedin/