Endpoint Playground
Searches the journalists index (dataset id enum value `journalists`) — public journalist and reporter records crawled from news outlets' own staff/author pages, for PR outreach. Each record carries the outlet, title, best-effort beat topics, and any public contact info found on that outlet's own page, plus deterministic record_type, role_type, email_kind, and outreach-readiness quality signals. There is no cross-outlet upstream search; this dataset is built by crawling a curated roster of outlets ourselves. vertical enum: `tech`, `crypto`, `marketing`, `consumer_tech`, `consumer_policy`, `cybersecurity`, `health`, `gaming`, `climate`, `business`, `entertainment`, `sports`, `legal`, `science`, `politics`, `real_estate`, `automotive`, `travel`, `food`, `education`, `design`, `film_tv`, `fashion`, `music`, `personal_finance`, `tech_independent`, `culture_independent`, `local_news`, `construction`, `banking`, `retail`, `aerospace_defense`, `energy`, `agriculture`, `local_business`. contact_type enum: `email`, `social`, `none`. record_type enum: `person`, `desk`, `organization`, `syndicated_byline`, `unknown`. role_type enum: `staff`, `editor`, `reporter`, `contributor`, `freelancer`, `columnist`, `non_editorial`, `unknown`. email_kind enum: `individual_work`, `individual_personal_public`, `shared_desk`, `tips_or_submissions`, `outlet_generic`, `unknown`. sort enum: `relevance`, `name_asc`, `outlet_asc`, `crawled_desc`, `readiness_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100). Dataset Playground requests query indexed data and do not apply proxy routing.
14 Oct 2026: 20 items; 17 fields had a value in every checked item and 7 varied between items.
Sample value profiles: crawled_at: 2026-08-31 to 2026-10-05; outreach_readiness_score: 33 to 100, median 88; profile_url: techcrunch.com.
curl "https://api.crawlora.net/api/v1/datasets/journalists/search?vertical=tech&contact_type=email&record_type=person&role_type=staff&email_kind=individual_work&sort=relevance" \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| q | string | No | Full-text match on the journalist's name, title, and bio, max 256 characters | |
| outlet | string | No | Exact outlet id filter, e.g. techcrunch, coindesk. Use the ids returned by facets?facet=outlet | |
| vertical | string | No | tech | Exact beat-vertical filter. Enum: tech, crypto, marketing, consumer_tech, consumer_policy, cybersecurity, health, gaming, climate, business, entertainment, sports, legal, science, politics, real_estate, automotive, travel, food, education, design, film_tv, fashion, music, personal_finance, tech_independent, culture_independent, local_news, construction, banking, retail, aerospace_defense, energy, agriculture, local_business, general_news |
| topic | string | No | Exact topic filter, e.g. security, stablecoins. Use the values returned by facets?facet=topic | |
| contact_type | string | No | Contact-availability filter. Enum: email, social, none | |
| record_type | string | No | person | Record classification filter. Enum: person, desk, organization, syndicated_byline, unknown |
| role_type | string | No | staff | Role classification filter. Enum: staff, editor, reporter, contributor, freelancer, columnist, non_editorial, unknown |
| email_kind | string | No | individual_work | Email semantics filter. Enum: individual_work, individual_personal_public, shared_desk, tips_or_submissions, outlet_generic, unknown |
| min_outreach_readiness | integer | No | Minimum outreach-readiness score, from 0 to 100 | |
| sort | string | No | relevance | Sort enum: relevance, name_asc, outlet_asc, crawled_desc, readiness_desc |
| page | integer | No | Page number, defaults to 1 | |
| page_size | integer | No | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 |
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "journalists",
"items": [
{
"outlet_id": "techcrunch",
"outlet": "TechCrunch",
"outlet_domain": "techcrunch.com",
"vertical": "tech",
"slug": "zack-whittaker",
"name": "Zack Whittaker",
"title": "Security Editor",
"bio": "Zack Whittaker is the security editor at TechCrunch...",
"topics": [
"security"
],
"profile_url": "https://techcrunch.com/author/zack-whittaker/",
"contact_email": "zack.whittaker@techcrunch.com",
"social_links": {
"signal": "zackwhittaker.1337",
"bluesky": "https://bsky.app/profile/zackwhittaker.com"
},
"contact_type": "email",
"normalized_name": "Zack Whittaker",
"record_type": "person",
"role_type": "editor",
"email_kind": "individual_work",
"email_domain": "techcrunch.com",
"contact_source_url": "https://techcrunch.com/author/zack-whittaker/",
"outreach_readiness_score": 98,
"outreach_readiness_band": "ready",
"outreach_readiness_reasons": [
"person_record",
"editorial_role",
"individual_work_email",
"profile_source",
"title_signal",
"topic_signal"
],
"outreach_quality_version": 1,
"crawled_at": "2026-09-14T12:00:00Z"
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "outlet_asc"
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.