Browsable Browsable Docs

Indeed job search

Search Indeed for job postings matching a query (and optional location), returning normalized listings with title, company, location, salary, snippet, posted-date, and the canonical Indeed job URL.

POST /v1/indeed/search

Request Parameters

Name In Type Required Description
query body string Yes Job search query — title, skill, or keywords (e.g. 'software engineer', 'nurse').
domain body string No Indeed regional domain (default www.indeed.com). Examples: 'uk.indeed.com', 'ca.indeed.com', 'de.indeed.com'.
location body string No Location filter — city, state, postcode, or 'Remote'. Leave empty to search everywhere on the chosen domain.
pages body number No How many result pages to fetch (each ~15 jobs). Defaults to 1.

Response Structure

Async kickoff response

Polled run result response

Sync response

Declared output schema

Code Examples

Async + polling

RUN=$(curl -s -X POST "https://api.browsable.app/v1/indeed/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"London","domain":"sample","location":"London","pages":1}')
RUN_ID=$(echo "$RUN" | jq -r '.run_id')
POLL_DELAY=3
while true; do
RESULT=$(curl -s -H "Authorization: Bearer YOUR_API_KEY" "https://api.browsable.app/v1/runs/$RUN_ID")
STATUS=$(echo "$RESULT" | jq -r '.run_status')
if [[ "$STATUS" =~ ^(succeeded|failed|errored|cancelled|canceled|expired)$ ]]; then
echo "$RESULT"
break
fi
sleep "$(awk "BEGIN { print $POLL_DELAY * (0.9 + ($RANDOM % 21) / 100) }")"
POLL_DELAY=$((POLL_DELAY < 30 ? POLL_DELAY * 2 : 30))
[ "$POLL_DELAY" -gt 30 ] && POLL_DELAY=30
done

Sync

curl -X POST "https://api.browsable.app/v1/indeed/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"London","domain":"sample","location":"London","pages":1,"_run":{"async":false}}'