Jobs Indeed API
Returns one Indeed job listing: title, company, location, description, and apply URL.
GET /v1/jobs/indeedLast updated November 2026Maintained by the SocialCrawl team
When to use the Jobs Indeed API
Use it after indeed/search, passing a job id from that list to read the full description.
From the API reference
Returns one Indeed job: title, company, location, description, and apply URL. Use an id from GET /v1/jobs/indeed/search.
Searching 69 platforms in parallel
What can you do with the Indeed API?
The Indeed endpoint gives you structured Jobs data with computed fields in a single request. No scraping infrastructure to build or maintain.
Example Request
# GET /v1/jobs/indeed: 5 credits per call. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
# --max-time 60: the API's own time limit for this endpoint.
# --retry 3: retries timeouts, 429 and 5xx, honoring Retry-After.
# -o response.json keeps only the final attempt's body.
# One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
IDEMPOTENCY_KEY=$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')
curl -sS --max-time 60 --retry 3 -o response.json \
-H "x-api-key: YOUR_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
"https://www.socialcrawl.dev/v1/jobs/indeed?id=aWQ9NWExYzEwM2YzOTEzODljNDtjYz11cw%3D%3D" && cat response.json# GET /v1/jobs/indeed: 5 credits per call. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
import os
import random
import time
import uuid
import requests
API_KEY = os.environ.get("SOCIALCRAWL_API_KEY", "YOUR_API_KEY")
TIMEOUT_S = 60 # the API's own time limit for this endpoint.
MAX_RETRIES = 3
URL = "https://www.socialcrawl.dev/v1/jobs/indeed"
def backoff(attempt):
# Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
return 2 ** attempt * (0.5 + random.random() / 2)
def socialcrawl(params):
# One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
idempotency_key = str(uuid.uuid4())
for attempt in range(MAX_RETRIES + 1):
try:
res = requests.get(
URL,
params=params,
headers={"x-api-key": API_KEY, "Idempotency-Key": idempotency_key},
timeout=TIMEOUT_S,
)
body = res.json()
except (requests.RequestException, ValueError):
# A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
if attempt == MAX_RETRIES:
raise
time.sleep(backoff(attempt))
continue
if body["success"]:
return body
error = body["error"]
# Branch on error["type"], never on the message text.
if error["type"] == "RESOURCE_NOT_FOUND":
return None # refunded: nothing to read
retry_after = res.headers.get("Retry-After")
# SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
permanent = error["type"] == "SERVICE_UNAVAILABLE" and retry_after is None
if not error.get("retryable") or permanent or attempt == MAX_RETRIES:
raise RuntimeError(f"{error['type']}: {error['message']} (request_id {body['request_id']})")
# Retry-After (seconds) wins; otherwise back off.
time.sleep(float(retry_after) if retry_after else backoff(attempt))
params = {
"id": "aWQ9NWExYzEwM2YzOTEzODljNDtjYz11cw==",
}
body = socialcrawl(params)
if body is not None:
print(body["data"])// GET /v1/jobs/indeed: 5 credits per call. Cache hits are free and failed calls are refunded.
// Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
const API_KEY = process.env.SOCIALCRAWL_API_KEY ?? "YOUR_API_KEY";
const TIMEOUT_MS = 60_000; // the API's own time limit for this endpoint.
const MAX_RETRIES = 3;
type Page = { next_cursor: string | null; has_more: boolean };
type SocialCrawlResponse =
| { success: true; data: any; pagination?: Page; credits_used: number; request_id: string }
| { success: false; error: { type: string; message: string; retryable: boolean }; request_id: string };
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
// Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
const backoffMs = (attempt: number) => 2 ** attempt * 1000 * (0.5 + Math.random() / 2);
async function socialcrawl(url: URL) {
// One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
const idempotencyKey = crypto.randomUUID();
for (let attempt = 0; ; attempt++) {
let res: Response;
let body: SocialCrawlResponse;
try {
res = await fetch(url, {
headers: {
"x-api-key": API_KEY,
"Idempotency-Key": idempotencyKey,
},
signal: AbortSignal.timeout(TIMEOUT_MS),
});
body = (await res.json()) as SocialCrawlResponse;
} catch (error) {
// A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
if (attempt >= MAX_RETRIES) throw error;
await sleep(backoffMs(attempt));
continue;
}
if (body.success) return body;
// Branch on error.type, never on the message text.
if (body.error.type === "RESOURCE_NOT_FOUND") return null; // refunded: nothing to read
const retryAfter = res.headers.get("Retry-After");
// SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
const permanent = body.error.type === "SERVICE_UNAVAILABLE" && retryAfter === null;
if (!body.error.retryable || permanent || attempt >= MAX_RETRIES) {
throw new Error(`${body.error.type}: ${body.error.message} (request_id ${body.request_id})`);
}
// Retry-After (seconds) wins; otherwise back off.
await sleep(retryAfter ? Number(retryAfter) * 1000 : backoffMs(attempt));
}
}
const url = new URL("https://www.socialcrawl.dev/v1/jobs/indeed");
url.searchParams.set("id", "aWQ9NWExYzEwM2YzOTEzODljNDtjYz11cw==");
const body = await socialcrawl(url);
if (body) console.log(body.data);Parameters
| Parameter | Required | Description |
|---|---|---|
| id | Yes | Indeed job id from indeed/search. |
What does the Jobs Indeed API return?
Every response follows one unified schema. Here is a real, unmodified response body, so you can see the exact fields you get back before spending a credit.
Example response
{
"success": true,
"platform": "jobs",
"endpoint": "/v1/jobs/indeed",
"data": {
"job": {
"id": "aWQ9NWExYzEwM2YzOTEzODljNDtjYz11cw==",
"title": "Software Engineer, Security",
"url": "https://jobs.ashbyhq.com/harvey/d2624850-8dd4-4eb4-b5dc-f386b715a26f",
"company": {
"id": null,
"name": "HARVEY",
"url": null,
"verified": null
},
"location": "San Francisco, CA",
"listed_at": "2026-09-01T05:00:00.000Z",
"easy_apply": null,
"remote": null,
"employment_type": null,
"experience_level": null,
"description": "Location\n\nSan Francisco\n\nEmployment Type\n\nFull time\n\nDepartment\n\nSecurity\n\nCompensation\n$161K – $245K • Offers Equity • Offers Bonus\n\nAdditionally, this role is eligible to participate in our equity plan and benefits program. Benefits include, but not limited to: Comprehensive health, dental and vision coverage, retirement benefits (401k match up to 4%), and flexible PTO.\nWhy Harvey\n\nAt Harvey, we’re transforming how legal and professional services operate. By combining frontier agentic AI, an enterprise-grade platform, and deep domain expertise, we’re reshaping how critical knowledge work gets done for decades to come.\n\nThis is a rare chance to help build a generational company at a true inflection point. We have strong product-market fit and world-class investor support. We’re scaling fast and defining a new category in real time. The work is ambitious, the bar is high, and the opportunity for growth — personal, professional, and financial — is unmatched.\n\nOur team moves fast, takes ownership, and is deeply committed to the mission — operating with intensity, staying close to our customers, and pushing each other for excellence. We live by three values: Decisiveness, Simplicity, and Job's Not Finished. We act quickly on clear judgment over perfect information, we believe simplicity is what scales, and we're never satisfied with where we are. If you want to do the best work of your career alongside people who share that drive, we'd love to build with you.\n\nAt Harvey, the future of professional services is being written today — and we’re just getting started.\n\nRole Overview\n\nAs a Software Engineer on the Security Engineering team at Harvey, you'll build and operate foundational security services for both our customer-facing product and the internal systems our workforce depends on: identity and access management, secrets and privileged access, agent sandboxes, and tooling that makes the secure path the fast path. You'll turn security needs into production systems and own the reliability and security of what you build, working closely with engineers and partner teams along the way. Attackers increasingly operate at agent speed, so we’re building defenses that can keep pace.\n\nSecurity at Harvey is an engineering discipline, not a gatekeeper function. We build platforms and libraries that make it hard for engineers to get security wrong, and we measure ourselves on adoption and outcomes rather than tickets filed. Our program is informed by risk: we invest where the actual exposure to our most sensitive data and resources is greatest, rather than where a framework tells us to.\n\nWhat You'll Do\n\nBuild and operate Harvey’s core identity and access services across customer-facing product, workforce, and infrastructure systems, including authentication, authorization, access governance, secrets, and privileged access\n\nEvolve how Harvey customers set up and manage their environments, making security-critical configuration—from identity and access to policies and integrations—delightful to use and secure by default\n\nBuild identity controls, sandboxes, and safety harnesses that let services and AI agents operate with least privilege, constrained actions, clear auditability, and effective monitoring\n\nCreate secure-by-default libraries, paved-road abstractions, self-service tooling, and agentic workflows that automate security triage, remediation, and evidence collection\n\nTake security systems from design through production, accounting for trust boundaries, attacker paths, and operational failure modes while owning their reliability and security\n\nShare an on-call rotation for Harvey’s mission-critical security services, contribute to incident response, and raise the engineering bar through design reviews, code reviews, and clear documentation\n\nWhat You Have\n\n2+ years of software engineering experience, including experience shipping and operating production services\n\nExperience building or contributing to security infrastructure such as identity and access management, authentication and authorization, secrets management, or privileged access\n\nStrong programming, debugging, testing, and problem-solving skills, with the ability to work across unfamiliar systems and domains\n\nExperience with cloud infrastructure such as Microsoft Azure, Google Cloud Platform, or Amazon Web Services and familiarity with modern distributed-system patterns\n\nA track record of translating security requirements into maintainable, automated systems\n\nExperience using agentic coding tools and creating workflows that automate repetitive security work, with the judgment to review their output critically and measure whether they improve security outcomes\n\nClear communication and collaboration skills, including the ability to explain technical risks, decisions, and tradeoffs to engineering partners\n\nWorking knowledge of common vulnerability classes and the ability to reason about how a system fails under an attacker, not just under load\n\nNice to Have\n\nExperience building security infrastructure at a fast-growing company\n\nExperience with SCIM; OpenID Connect (OIDC); Security Assertion Markup Language (SAML); policy engines such as Open Policy Agent (OPA), Cedar, or Zanzibar-style systems; or hardware-backed credentials\n\nExperience securing agentic or AI-powered systems, especially systems that act on behalf of users against sensitive data\n\nExperience working in a highly regulated enterprise environment\n\nCompensation\n\n$161,000 - $245,000 USD\n\nDepending on your location, an Applicant Privacy Notice may apply to you. You can find all of our Applicant Privacy Notices [here].\n\n#LI-NP1\n\nHarvey is an equal opportunity employer and does not discriminate on the basis of race, gender, sexual orientation, gender identity/expression, national origin, disability, age, genetic information, veteran status, marital status, pregnancy or related condition, or any other basis protected by law.\n\nWe are committed to providing reasonable accommodations to applicants with disabilities, and requests can be made by emailing accommodations@harvey.ai",
"apply_url": "https://jobs.ashbyhq.com/harvey/d2624850-8dd4-4eb4-b5dc-f386b715a26f",
"ext": {
"applicant_count": null,
"job_provider": null,
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"country_code": "US",
"linkedin_company_name": null,
"industries": null,
"job_function": null,
"accepting_applications": null,
"board": "indeed"
}
}
},
"credits_used": 5,
"request_id": "req_example000000",
"cached": false,
"credits_remaining": 9999,
"redacted": true
}Live sample illustrating the unified response shape. Field values reflect the record you query.
How does the Jobs Indeed API work?
Send a GET request with your API key and get back clean, structured JSON in our unified schema. Supported computed fields are populated when the source provides the required inputs.
Method
GET
Response
JSON
How do you scrape social media data in seconds?
The fastest social media scraping API for developers. Scrape profiles, posts, comments, and analytics from 69 platforms covering 10B+ monthly active users.
One schema, every platform
Query 69 platforms with identical response structures. Write your integration once.
Computed fields, not just scraped
When an endpoint supports these metrics and the source provides the required inputs, the normalized record includes engagement_rate, estimated_reach, content_category, and language. Ready to use.
See your data before you code
Visual Data Explorer. Paste any URL, get rich result cards, sortable tables, CSV export.
import requests
response = requests.get(
'https://www.socialcrawl.dev/v1/tiktok/profile',
params={'handle': 'charlidamelio'},
headers={'x-api-key': 'sc_YOUR_API_KEY'}
)
data = response.json(){
"success": true,
"platform": "tiktok",
"data": {
"author": {
"username": "charlidamelio",
"followers": 152400000
},
"engagement": {
"likes": 12400000000,
"engagement_rate": 0.087
},
"metadata": {
"language": "en",
"content_category": "lifestyle"
}
}
}Have a question? We got answers
Find answers to frequently asked questions about SocialCrawl's API, pricing, and capabilities.
Contact usWhat does the Indeed Jobs API return?
When should I use the Indeed Jobs endpoint?
How much does the Indeed Jobs API cost?
What parameters does the Indeed Jobs API need?
How do I call the Indeed Jobs API?
Ask AI about SocialCrawl
Ready to scrape Jobs Indeed data?
Get your API key and start pulling Jobs data in under 60 seconds.
