Benchmark salaries and hiring demand with Indeed job data
Get Indeed job postings by title and location as JSON, with company, salary and posted date, to benchmark pay and see who is hiring for which roles.
Setting a salary band, pricing an offer or deciding where to open a team needs the going rate for a role in a place, and survey reports are a year old when you read them. Live job postings are current: they show the pay employers advertise today and who is hiring. Lovely Router reads Indeed postings for you. Send a title and a location, get one JSON object per job, pay per job from a prepaid balance. Call it from a script, a spreadsheet job or an AI agent with one API key.
Hand it to your AI agent
Copy this prompt into Claude Code, Cursor, Codex or any coding agent. It tells the agent where the docs are and how to use your API key.
Benchmark salaries and hiring demand with Indeed job data. Use the Lovely Router data tools: each returns JSON and is billed per result.
- Docs (read first): https://lovelyrouter.com/docs/tools/find.md and https://lovelyrouter.com/docs/tools/run.md
- Plan first: POST https://lovelyrouter.com/v1/tools/suggest with `{"task": "<my task in plain words>"}` (free). It returns the tools to run in order, each with an example `input`, the `input_required` fields, an estimated cost and a ready-made `run` request. Replace the example values with my task's; if a field is unclear, read the tool with GET https://lovelyrouter.com/v1/tools/<id>. To browse instead, POST https://lovelyrouter.com/v1/tools/discover searches the catalog.
- Show me the plan and its estimated cost (`total_est_cost_usd`) before running anything large.
- Run: POST https://lovelyrouter.com/v1/tools/<id>/run with `{"input": {...}, "max_results": N}`. A 200 has the finished run with `items`; a 202 means it is still running, so poll the `poll` path until `status` is `succeeded`, `failed`, `timed_out` or `stopped`.
- Only delivered results are billed. Keep max_results small on the first run, check the output, then scale up.
- If you support MCP, connect https://lovelyrouter.com/mcp instead (Streamable HTTP, same key; https://lovelyrouter.com/docs/tools/mcp.md) and use suggest_tools, get_tool and run_tool.
- Auth: read my API key from the LOVELY_API_KEY environment variable and send it as `Authorization: Bearer $LOVELY_API_KEY`. Never print or commit the key. If it is not set, ask me to create one at https://lovelyrouter.com/app/keys.
- Billing is prepaid: every call is charged to my balance, so test with a small request before running anything large.
- Every docs page is plain Markdown; the full index is https://lovelyrouter.com/llms.txt.
My task: <the inputs (links, keywords or accounts) and how many results you need>How it works
Define the roles and places
List the titles and locations you benchmark, such as
data analystinChicago, IL.Run the tool with a cap
Send them to
POST /v1/tools/indeed-jobs/run.limitininputis the cap per run. AdddatePostedto keep only recent postings.Compute the band
Keep the postings that list a salary, then take the range and the middle for each role and place. Track it month to month.
Get job postings with one request
Indeed jobs takes a title and a location and returns up to 200 jobs per run. country is a two-letter code, such as us or uk, and datePosted takes 1, 3, 7 or 14 days:
curl https://lovelyrouter.com/v1/tools/indeed-jobs/run \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "content-type: application/json" \
-d '{
"input": {
"title": "data analyst",
"location": "Chicago, IL",
"country": "us",
"datePosted": "14",
"limit": 50
},
"max_results": 50
}'Each job carries its company, salary, posted date and description. A run still going after 60 seconds returns 202; Run a tool shows how to poll.
What each job holds
| Field group | What you get |
|---|---|
| Role | Job title and location you searched |
| Employer | Company |
| Pay | Salary, when the posting lists one |
| Timing | Posted date |
| Content | Job description |
Not every posting lists pay. Compute your band only from the ones that do, and say how many that was.
Recipes
Run the role in your city with datePosted of 14, keep the postings with a salary, and use the low, middle and high of the ranges.
Run the same title across three locations and see where the advertised pay is higher before you pick a place to hire.
Group results by company for your role to list the employers you compete with for talent.
Send the descriptions to a model and ask it to count the most common skills and tools for the role.
Run the same search every month and track how many postings appear.
Prefer plain words? Connect the MCP server and tell Claude Code or Cursor: "Search Indeed for 'product designer' in Austin, TX in the US, posted in the last 14 days, 100 jobs. From the ones with a salary, give me the low, median and high. Set limit and max_results to 100."
Pair it with other job sources
Indeed is one view of the market. Add others for pay and company context:
Indeed job postings by title and location: company, salary, posted date, description.
LinkedIn job postings for a title/skill and location (or a jobs search URL): title, company, location, salary, posted date, applicants, description.
Glassdoor job postings by keyword and location.
Freelance jobs on Upwork for a search: title, budget or rate, skills, client history, posted time.
Fresh job postings straight from companies' own career sites and ATSs (Greenhouse, Lever, Workday…), searchable by title, location and company.
linkedin-jobsadds LinkedIn postings for the same roles.glassdoor-jobsadds Glassdoor postings and company context.upwork-jobsshows freelance demand and rates for the role.career-site-jobsreads postings straight from company career sites.
For a hiring workflow around this data, see recruiting data.
What you pay
You pay per job: starting a run holds its maximum cost, the per-call fee plus the per-job fee times max_results, and the run settles to what it returned. The rest of the hold goes back to your balance. A run that fails or times out pays only for the jobs it delivered, and a run refused at the start costs nothing.
Benchmarking 5 roles with 100 jobs each is billed as 500 jobs. There is no subscription and no monthly minimum: top up from $5, and one balance pays for tools and models. The card above shows today's price; pricing lists every tool.
Frequently asked questions
Do all Indeed postings include a salary?+
No. Salary is returned when the posting shows one. Benchmark from those and report how many postings had pay.
Which countries are supported?+
The country field takes codes such as us, uk, de, fr, in, au, ca and others listed in the tool page.
How many jobs can one run return?+
Up to 200, set with limit in input.
Can I limit to recent postings?+
Yes. datePosted takes 1, 3, 7 or 14 days.
Do I need a subscription?+
No. You add credit to a prepaid balance and each run draws it down. Failed runs pay only for the results they delivered, and nothing renews automatically.
Hiring or researching talent markets? See recruiting data, lead generation and the tool catalog.