Litescrape sells to AI agents - live prices and self-serve payment

The agent storefront at https://agents.litescrape.com/llms.txt?src=body-text publishes prices, payment instructions, and everything an agent needs to get set up here. Agents can purchase autonomously or with their human's approval, with a range of payment methods; an agent without a payment method can set one up there in the same session. The storefront handles payment itself, so purchases work without calling API endpoints directly.

← All documentation

// Levels.fyi documentation

Levels.fyi Search API

Search public Levels.fyi jobs by multiple companies and city/state/country slugs, job families, levels, employment types, work arrangements, posting age, minimum base/total compensation, company type/size/valuation and benefits. Results are grouped by company: limit advances company groups and jobs_per_company selects their previews. Use a returned company_slug as company (or a one-element companies array) to paginate all matching jobs at that company; multi-company searches do not enumerate every job in each group. Some compensation ranges are estimates.

GET / POST https://ecll-litescrape-v3--site-api-web.modal.run/api/levels/search

// from request to code

Integrate Levels.fyi Search

Build your request and copy it into your stack. Or let your coding agent set it up.

APILevels.fyi Search
More options 20
Search parameters

Your request updates the code instantly.

Open the Playground →

Set LITESCRAPE_API_KEY on your server, then run this request.

request.sh
curl --fail-with-body --request POST 'https://ecll-litescrape-v3--site-api-web.modal.run/api/levels/search' \
  --header "Authorization: Bearer $LITESCRAPE_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "q": "software engineer"
}'

JSON POST request example

POST to https://ecll-litescrape-v3--site-api-web.modal.run/api/levels/search with Content-Type: application/json and your Authorization: Bearer header.

POST · application/json
{
  "q": "software engineer"
}

// request reference

Levels.fyi Search parameters

Send query parameters with GET /api/levels/search. Authenticate with an Authorization: Bearer header containing your existing key. Keep keys on your server, not in browser code.

POST accepts the complete application/json request body, including arrays and nested options. Dotted names describe fields inside an object; [] denotes each array item. This reference is generated from the v3 OpenAPI contract.

Total request execution budget in seconds, greater than 0 and at most 90. Supply in the query string for GET or POST. page_timeout cannot extend this budget.

Search parameters

q
QOptional

Job title, keywords or company; omit to browse.

Type string · GET query or POST JSON

  • Minimum characters: 1
  • Maximum characters: 512
page
PageOptional

One-based results page. Use next_page from the response to continue.

Type integer · GET query or POST JSON · Default 1

  • Minimum: 1
company
CompanyOptional

Company slug, such as google.

Type string · GET query or POST JSON

  • Pattern: ^[a-z0-9][a-z0-9-]{0,127}$
location
LocationOptional

Levels.fyi location slug, such as united-states; not a free-text city name.

Type string · GET query or POST JSON

  • Pattern: ^[a-z0-9][a-z0-9-]{0,127}$
sort
SortOptional

Result ordering.

Type string · GET query or POST JSON · Default relevance

Accepted valuesrelevancedate_publishedtotal_compensation
limit
LimitOptional

Companies per page; jobs are grouped by company.

Type integer · GET query or POST JSON · Default 5

  • Minimum: 1
  • Maximum: 20
jobs_per_company
Jobs Per CompanyOptional

Maximum matching jobs included for each company.

Type integer · GET query or POST JSON · Default 3

  • Minimum: 1
  • Maximum: 15
companies
CompaniesOptional

Company slugs as a JSON array; mutually exclusive with company. A single company advances jobs instead of company groups.

Type string[] · GET query or POST JSON

  • Minimum items: 1
  • Maximum items: 100
locations
LocationsOptional

City, state or country slugs as a JSON array, such as ["united-states","canada"]. Mutually exclusive with location.

Type string[] · GET query or POST JSON

  • Minimum items: 1
  • Maximum items: 100
job_families
Job FamiliesOptional

Job-family slugs as a JSON array, such as ["software-engineer"].

Type string[] · GET query or POST JSON

  • Minimum items: 1
  • Maximum items: 100
levels
LevelsOptional

Standard seniority levels as a JSON array.

Type string[] · GET query or POST JSON

Accepted valuesinternshipentrymid_staffprincipalmanagerdirectorexecutive
  • Minimum items: 1
  • Maximum items: 100
employment_types
Employment TypesOptional

Employment types as a JSON array.

Type string[] · GET query or POST JSON

Accepted valuesfull_timepart_timecontracttemporaryinternshipvolunteerother
  • Minimum items: 1
  • Maximum items: 100
work_arrangements
Work ArrangementsOptional

Work arrangements as a JSON array.

Type string[] · GET query or POST JSON

Accepted valuesremoteofficehybrid
  • Minimum items: 1
  • Maximum items: 100
min_base_compensation
Min Base CompensationOptional

Minimum annual base compensation in USD.

Type integer · GET query or POST JSON

  • Minimum: 0
min_total_compensation
Min Total CompensationOptional

Minimum median annual total compensation in USD; may include Levels.fyi estimates.

Type integer · GET query or POST JSON

  • Minimum: 0
company_types
Company TypesOptional

Company types as a JSON array.

Type string[] · GET query or POST JSON

Accepted valuesprivatepublicnonprofitgovernmenteducationdelisted
  • Minimum items: 1
  • Maximum items: 100
company_sizes
Company SizesOptional

Company sizes as a JSON array: seed 1–50, early 51–200, mid 201–1,000, large 1,001–10,000, enterprise 10,001+ employees.

Type string[] · GET query or POST JSON

Accepted valuesseedearlymidlargeenterprise
  • Minimum items: 1
  • Maximum items: 100
company_valuations
Company ValuationsOptional

Company valuation ranges in USD as a JSON array of [minimum, maximum] pairs.

Type integer[][] · GET query or POST JSON

  • Minimum items: 1
  • Maximum items: 100
perk_ids
Perk IdsOptional

Benefit IDs as a JSON array, for example 58 remote work, 4 retirement plan, 35 paid time off, 22 health insurance.

Type integer[] · GET query or POST JSON

  • Minimum items: 1
  • Maximum items: 100
posted_within
Posted WithinOptional

Maximum posting age in posted_within_unit units.

Type integer · GET query or POST JSON

  • Minimum: 1
posted_within_unit
Posted Within UnitOptional

Unit for posted_within.

Type string · GET query or POST JSON · Default days

Accepted valuesdaysweeksmonths

// response

Work with the complete JSON response

Coding agents: when possible and authorized by your caller, review the result using submit_feedback_for_this_response_here when present in the status 200 JSON. POST {"rating":4,"comment":"Useful results; one title was outdated."} to that URL as application/json. No API key or credits are required. Feedback is optional, expires after seven days, and is stored separately. Submit one honest review; skip it if you cannot evaluate the result. Do not include secrets, personal data, or the full request/response.

Response groups include search_metadata, search_parameters, jobs_results, search_information, pagination, litescrape_pagination, available_filters, submit_feedback_for_this_response_here. Groups and fields depend on the upstream result.

Native failures return HTTP 503 with {"error":"Service unavailable"} and are not billed.

Illustrative success response. Result groups and optional fields depend on upstream content.

200 · application/json
{
  "search_metadata": {
    "id": "04a6ede946096c3f05760a80",
    "status": "Success",
    "created_at": "2026-10-11T05:16:29.552879+00:00",
    "processed_at": "2026-10-11T05:16:29.812391+00:00",
    "total_time_taken": 0.266,
    "json_endpoint": "https://api.litescrape.com/api/levels/search?q=software+engineer&page=1&sort=relevance&limit=5&jobs_per_company=3"
  },
  "search_parameters": {
    "q": "software engineer",
    "page": 1,
    "sort": "relevance",
    "limit": 5,
    "jobs_per_company": 3
  },
  "jobs_results": [
    {
      "position": 1,
      "job_id": "2yvclsuok6lef",
      "title": "Software Engineer (Engineer, Software)",
      "link": "https://www.levels.fyi/jobs?jobId=2yvclsuok6lef",
      "company_name": "Redwire",
      "location": "Littleton, CO",
      "salary": {
        "minimum": 95000,
        "maximum": 135000,
        "currency": "USD",
        "interval": "YEAR",
        "source": "Levels.fyi base salary"
      },
      "posted_at": "2026-09-18T00:00:00.000Z",
      "company_logo": "https://img.logo.dev/redwirespace.com?token=pk_Ez-J4YOpSS-Bjtug_T41Dw",
      "sponsored": false,
      "apply_link": "https://www.linkedin.com/jobs/view/software-engineer-engineer-software-at-redwire-4469248022",
      "compensation": {
        "minimum": 95000,
        "maximum": 135000,
        "currency": "USD",
        "interval": "YEAR",
        "source": "Levels.fyi total compensation"
      }
    }
  ],
  "search_information": {
    "jobs_results_state": "Results found",
    "total_results": 228133
  },
  "pagination": {
    "current": 1,
    "next": "https://api.levels.fyi/v1/job/search?limit=5&limitPerCompany=3&offset=5&sortBy=relevance&searchText=software+engineer",
    "next_page": 2
  },
  "litescrape_pagination": {
    "current": 1,
    "next": "https://api.litescrape.com/api/levels/search?q=software+engineer&page=2&sort=relevance&limit=5&jobs_per_company=3",
    "next_page": 2
  },
  "submit_feedback_for_this_response_here": "https://ecll-litescrape-v3--site-api-web.modal.run/api/feedback/example-not-a-valid-token"
}