Quick answer
Cameo doesn't publish a talent API. But cameo.com's own search box calls one internally — a POST to /api/v3/search/users, in the Algolia multi-search shape — and the Cameo Talent Listings Scraper queries that endpoint directly instead of rendering pages. A live run against it returned matched talent rows with every price tier (standard, DM, iOS, business), star rating, and 24-hour / 7-day booking counts, billed at $1.25 per 1,000 rows.
Does Cameo have a public talent API? 🔍
No. There's no documented endpoint, no API key signup, no developer portal. What Cameo has is a search box on cameo.com that, when you type a name, fires a POST request against its own backend and gets back structured JSON — the same request shape Algolia's multipleQueries API uses, hitting an index Cameo calls prod_cameo_talent_v0.
That's the surface this Actor talks to. One request, one JSON body describing what you're searching for and how many results per page, one JSON response back with hits[] — no DOM to walk, no <script> tag to regex out, no headless browser tab to keep alive. It's the same request Cameo's own frontend makes; we just make it directly and skip the HTML.
What's actually in a row 📦
Each hits[] object gets mapped straight into a validated dataset row. Prices arrive from Cameo as integer cents (price, dmPrice, iosPrice, businessPrice) and get converted to dollars — with 0.0 and null kept as genuinely different things, since Cameo uses 0 to mean "offered for free" and an absent key to mean "not offered at all."
{
"id": "5de2b2ab0e7204016ccde9b5",
"name": "Chris Gronkowski",
"username": "chrisgronkowski",
"profile_url": "https://www.cameo.com/chrisgronkowski",
"profession": "Former NFL Fullback",
"price_usd": 30.0,
"dm_price_usd": 0.0,
"ios_price_usd": 42.85,
"business_price_usd": 500.0,
"tags": ["Promotional", "Athletes"],
"average_rating": 4.9,
"num_ratings": 181,
"temporarily_unavailable": false,
"is_available_for_business": true,
"booking_last_24h": 0,
"booking_last_7d": 1,
"matched_queries": ["Gronk"]
}
booking_last_24h and booking_last_7d come straight from Cameo's own bookingMetrics block — a live demand signal most scrapers of this target don't bother mapping, because it means finding the field inside a nested object instead of the flat ones sitting at the top level of the hit.
What running a real query looks like
{
"queries": ["MrBeast"],
"sortBy": "featured",
"maxResultsPerQuery": 5,
"hitsPerPage": 5,
"proxyConfiguration": { "useApifyProxy": true }
}
Or via the Apify Python client:
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("DevilScrapes/cameo-talent-listings-scraper").call(
run_input={"queries": ["MrBeast", "Snoop Dogg"], "maxResultsPerQuery": 20}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["price_usd"], item["booking_last_7d"])
Every entry in queries gets searched independently; a talent matched by more than one query is emitted once, with every query that surfaced them recorded in matched_queries — so a 50-name watchlist doesn't come back as 50 overlapping datasets you have to merge yourself.
What we handle 🛡️
-
Browser fingerprint rotation. Requests go out via
curl-cffi, impersonating a real Chrome, Firefox, or Safari TLS/HTTP2 handshake per run, not a raw Python client signature. -
Retries with backoff.
408 / 429 / 5xxand network errors get up to 5 attempts, 2 seconds doubling to a 30-second cap, and we honorRetry-Afterwhen the target sends one. -
A quiet fallback, not a failed run.
sortByvalues beyond the verifiedfeaturedorder map to alternate Algolia indexes on Cameo's side. If Cameo rejects one of those index names, the Actor falls back to the base index automatically instead of failing your run. - Per-query fault isolation. One bad or empty search term doesn't take the rest of your query list down with it — each one succeeds or fails on its own, and a query that ran and matched nothing finishes as a clean zero-row success, not an error.
- Typed, deduped output. Every row is Pydantic-validated before it lands in your dataset.
What people build with this 💡
- Talent-booking agencies pulling current pricing across a shortlist of names before pitching a client, instead of checking profiles one by one.
- PR and marketing competitive-intel teams tracking which creators are active on Cameo, what tags they're filed under, and how their pricing moves over time.
- Event planners comparison-shopping talent by category and price tier in one pass.
- Influencer-marketing platforms enriching an existing creator database with Cameo's own pricing and booking-activity numbers.
Frequently asked questions
What does 1,000 rows cost?
$1.25 — a $0.05 run-start charge plus $0.0012 per unique talent row. You only pay for rows that land in your dataset.
Do I need a Cameo account or API key?
No. This queries Cameo's own public search backend — no login, no key.
Can I search by category instead of name?
queries is free-text and gets sent straight to Cameo's search index, so a category word (e.g. "athletes") works the same way a name does — matching is entirely up to what Cameo's index returns.
What happens if a search term matches nobody?
That term finishes as a clean zero-row success. The run only fails if a query genuinely couldn't be reached after retries — not because it came back empty.
Does this include profile bio text or video samples?
No — the search endpoint returns listing-level fields only. Profession, tags, pricing, ratings, and booking activity are in scope; long-form bio copy and video content aren't.
Try it
Live on the Apify Store: Cameo Talent Listings Scraper. Apify gives every new account $5 of free credit, no card required to try it.
Built by Devil Scrapes — we read the API the target's own frontend already calls, so your dataset doesn't have to come from guesswork.
Top comments (0)