Scrape Career Pages
curl --request POST \
--url https://api.automindz.co/v1/scrape-career-pages/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"company_url": "inriver.com",
"company_name": "inRiver",
"max_pages": 10,
"target_titles_prompt": "Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.",
"target_locations": [
"Finland",
"Sweden",
"Denmark",
"Norway",
"Belgium",
"Netherlands"
],
"known_career_page_url": "https://career.inriver.com"
}
EOFimport requests
url = "https://api.automindz.co/v1/scrape-career-pages/async"
payload = {
"company_url": "inriver.com",
"company_name": "inRiver",
"max_pages": 10,
"target_titles_prompt": "Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.",
"target_locations": ["Finland", "Sweden", "Denmark", "Norway", "Belgium", "Netherlands"],
"known_career_page_url": "https://career.inriver.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
company_url: 'inriver.com',
company_name: 'inRiver',
max_pages: 10,
target_titles_prompt: 'Only keep Principal Investigator, any \'Investigator\'/\'PI\' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.',
target_locations: ['Finland', 'Sweden', 'Denmark', 'Norway', 'Belgium', 'Netherlands'],
known_career_page_url: 'https://career.inriver.com'
})
};
fetch('https://api.automindz.co/v1/scrape-career-pages/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-career-pages/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'company_url' => 'inriver.com',
'company_name' => 'inRiver',
'max_pages' => 10,
'target_titles_prompt' => 'Only keep Principal Investigator, any \'Investigator\'/\'PI\' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.',
'target_locations' => [
'Finland',
'Sweden',
'Denmark',
'Norway',
'Belgium',
'Netherlands'
],
'known_career_page_url' => 'https://career.inriver.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-career-pages/async"
payload := strings.NewReader("{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-career-pages/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-career-pages/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_abc123xyz",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Scrapers
Scrape career pages
Discover and extract job listings from a company’s career page
POST
/
v1
/
scrape-career-pages
/
async
Scrape Career Pages
curl --request POST \
--url https://api.automindz.co/v1/scrape-career-pages/async \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"company_url": "inriver.com",
"company_name": "inRiver",
"max_pages": 10,
"target_titles_prompt": "Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.",
"target_locations": [
"Finland",
"Sweden",
"Denmark",
"Norway",
"Belgium",
"Netherlands"
],
"known_career_page_url": "https://career.inriver.com"
}
EOFimport requests
url = "https://api.automindz.co/v1/scrape-career-pages/async"
payload = {
"company_url": "inriver.com",
"company_name": "inRiver",
"max_pages": 10,
"target_titles_prompt": "Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.",
"target_locations": ["Finland", "Sweden", "Denmark", "Norway", "Belgium", "Netherlands"],
"known_career_page_url": "https://career.inriver.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
company_url: 'inriver.com',
company_name: 'inRiver',
max_pages: 10,
target_titles_prompt: 'Only keep Principal Investigator, any \'Investigator\'/\'PI\' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.',
target_locations: ['Finland', 'Sweden', 'Denmark', 'Norway', 'Belgium', 'Netherlands'],
known_career_page_url: 'https://career.inriver.com'
})
};
fetch('https://api.automindz.co/v1/scrape-career-pages/async', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.automindz.co/v1/scrape-career-pages/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'company_url' => 'inriver.com',
'company_name' => 'inRiver',
'max_pages' => 10,
'target_titles_prompt' => 'Only keep Principal Investigator, any \'Investigator\'/\'PI\' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.',
'target_locations' => [
'Finland',
'Sweden',
'Denmark',
'Norway',
'Belgium',
'Netherlands'
],
'known_career_page_url' => 'https://career.inriver.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.automindz.co/v1/scrape-career-pages/async"
payload := strings.NewReader("{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.automindz.co/v1/scrape-career-pages/async")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.automindz.co/v1/scrape-career-pages/async")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"company_url\": \"inriver.com\",\n \"company_name\": \"inRiver\",\n \"max_pages\": 10,\n \"target_titles_prompt\": \"Only keep Principal Investigator, any 'Investigator'/'PI' role, any physician/clinician role, Medical Director, Physician Investigator, Clinical Research Physician. Reject everything else.\",\n \"target_locations\": [\n \"Finland\",\n \"Sweden\",\n \"Denmark\",\n \"Norway\",\n \"Belgium\",\n \"Netherlands\"\n ],\n \"known_career_page_url\": \"https://career.inriver.com\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "run_abc123xyz",
"status": "QUEUED"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Triggers a career page scrape for a given company URL. The scraper maps the company’s website, identifies career pages, extracts job listings, and returns structured job posting data.
The pipeline runs asynchronously. Use the returned
run_id to poll for results.
target_titles and target_titles_prompt are two ways to express the same title filter and are mutually exclusive — sending both returns 422. Use target_titles for a fixed list, or target_titles_prompt for open-ended roles.Timing guidance: Most scrapes complete within 2-5 minutes. Companies with many pages or ATS-hosted job boards may take longer. Poll every 15-30 seconds.
How it works
- Maps the company website to discover URLs
- Identifies career/jobs pages using pattern matching and AI filtering
- Scrapes each career page and extracts job listings
- Applies optional title/location filters (pass
target_titles_promptto drive AI title filtering for open-ended role sets, e.g. “any physician role”) - Analyzes each job posting in detail (salary, requirements, hiring manager, etc.)
Example responses
Completed — jobs found
Completed — jobs found
{
"request_id": "run_abc123xyz",
"status": "COMPLETED",
"result": {
"company": "Acme Corp",
"url": "https://acme.com",
"career_page_urls": ["https://jobs.lever.co/acme"],
"pages_scraped": 3,
"jobs_returned": 1,
"jobs_total": 1,
"jobs_filtered_out": 0,
"limit": 25,
"offset": 0,
"has_more": false,
"jobs": [
{
"job_title": "Senior Software Engineer",
"location": "London, UK",
"city": "London",
"country": "United Kingdom",
"job_type": "full-time",
"remote_policy": "hybrid",
"department": "Engineering",
"salary_min": 90000,
"salary_max": 120000,
"salary_currency": "GBP",
"salary_period": "annual",
"min_years_of_experience": 5,
"requirements": ["5+ years TypeScript", "React", "Node.js"],
"job_url": "https://jobs.lever.co/acme/abc-123",
"ats_system": "lever",
"posted_at": "2026-05-01"
}
]
},
"started_at": "2026-05-15T10:00:00Z",
"finished_at": "2026-05-15T10:03:42Z"
}
Completed — no jobs found
Completed — no jobs found
{
"request_id": "run_def456uvw",
"status": "COMPLETED",
"result": {
"company": "acme.com",
"url": "https://acme.com",
"pages_scraped": 8,
"jobs_returned": 0,
"jobs_total": 0,
"jobs_filtered_out": 0,
"limit": 25,
"offset": 0,
"has_more": false,
"jobs": []
},
"started_at": "2026-05-15T10:00:00Z",
"finished_at": "2026-05-15T10:04:10Z"
}
Queued / running
Queued / running
{
"run_id": "run_ghi789rst",
"status": "QUEUED",
"result": null,
"started_at": null,
"finished_at": null
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Explicit list of target job titles. Mutually exclusive with target_titles_prompt — passing both returns HTTP 422.
Natural-language instruction telling the AI filter which job titles to keep and which to reject. Use instead of target_titles when the target roles are open-ended (e.g. 'any physician role'). When set, the title keyword pre-filter is bypassed and the LLM decides per the prompt. Mutually exclusive with target_titles — passing both returns HTTP 422.
Show child attributes
Show child attributes
⌘I