Integrations · Python · YouTube
YouTube data in Python. Pay per record.
Call the YouTube API from Python with one HTTPS request per operation: channels, videos and comments. Every call can be quoted free first, and you pay per record that comes back, from $0.00045 per record, from a prepaid balance with $0.10 free to start.
- Works with
- Python
- Operations
- 3
- Price
- From $0.00045 per record
- Free to start
- $0.10
Updated 21 October 2026
Set it up in Python
- pip install requests, and put your API key in the AFA_KEY environment variable.
- Call the function below once per operation; quote first with estimate_only=True.
Channels
import os, requests
def youtube(op: str, params: dict, estimate_only: bool = False) -> dict:
r = requests.post(
"https://apiforagents.dev/v1/youtube",
headers={"Authorization": f"Bearer {os.environ['AFA_KEY']}"},
json={"op": op, **params, "estimateOnly": estimate_only},
timeout=120,
)
body = r.json()
if r.status_code != 200:
raise RuntimeError(f"{body.get('error')}: {body.get('error_description')}")
return body # read body["coverage"] before body["data"]
quote = youtube("channels", {
"subjects": ["@mkbhd"],
}, estimate_only=True)
print(quote["cost"]["wouldChargeUsd"])Videos
Show the full exampleHide
import os, requests
def youtube(op: str, params: dict, estimate_only: bool = False) -> dict:
r = requests.post(
"https://apiforagents.dev/v1/youtube",
headers={"Authorization": f"Bearer {os.environ['AFA_KEY']}"},
json={"op": op, **params, "estimateOnly": estimate_only},
timeout=120,
)
body = r.json()
if r.status_code != 200:
raise RuntimeError(f"{body.get('error')}: {body.get('error_description')}")
return body # read body["coverage"] before body["data"]
quote = youtube("videos", {
"subject": "@mkbhd",
"limit": 10,
}, estimate_only=True)
print(quote["cost"]["wouldChargeUsd"])Comments
Show the full exampleHide
import os, requests
def youtube(op: str, params: dict, estimate_only: bool = False) -> dict:
r = requests.post(
"https://apiforagents.dev/v1/youtube",
headers={"Authorization": f"Bearer {os.environ['AFA_KEY']}"},
json={"op": op, **params, "estimateOnly": estimate_only},
timeout=120,
)
body = r.json()
if r.status_code != 200:
raise RuntimeError(f"{body.get('error')}: {body.get('error_description')}")
return body # read body["coverage"] before body["data"]
quote = youtube("comments", {
"subjects": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"limit": 50,
}, estimate_only=True)
print(quote["cost"]["wouldChargeUsd"])YouTube operations you can call
List prices per record. A call can carry a minimum, so quote first: the quote is free and is the most a call can cost.
| Operation | Price per record |
|---|---|
| Channels | $0.00045 |
| Videos | $0.00045 |
| Comments | $0.00045 |
Each operation in detail
Questions people ask.
Is there an SDK?
No SDK is needed: it is one HTTPS POST per call to https://apiforagents.dev/v1/youtube, so requests or httpx is enough.
How do I handle errors?
A refusal answers with an error code and a plain description; a subject that did not come back is listed in coverage with the reason, and is not charged.
What does YouTube data cost?
Pay as you go, from $0.00045 per record at the list price. Some calls carry a minimum, so quote first with "estimateOnly": true: it is free and is the most the call can cost. Records that do not come back are refunded.
Try it in a minute. $0.10 free.
The playground runs any endpoint by hand: pick a platform and what you want from it, fill a short form named in plain words (or press Use sample input), see the free quote on the Run button, run it, then read the answer as a table or JSON and download it as CSV or JSON. The same call is written out as cURL, Python and Node while you type.
Why people pick API for Agents
- One key for 26 platforms: social, commerce, jobs, places, search and contacts, with one request shape and one response shape.
- A free quote before any spend: add "estimateOnly": true to any call and see the most it can cost.
- Pay per record in US dollars. No subscription, nothing expires, top-ups from $5.
- $0.10 free to try, no card. An AI agent can sign itself up in one request; a person claims it later.
- Measured, not estimated: every answer says when each row was measured, whether it was fresh or a recent capture, and how sure to be of each field.
- Partial success is success: anything that could not be fetched is named with a reason, and the charge settles to what came back, never above the quote.
- Typed fields that keep their names whichever source answered, and a details object last with everything else the source sent, under our own field names.
- Try any endpoint in the playground and download the answer as CSV or JSON.
API for Agents is independent and not affiliated with or endorsed by LinkedIn or any company named here. LinkedIn is a trademark of LinkedIn Corporation; other names belong to their owners. Public data only: nothing behind a login.