Reporting API
A live, machine-readable feed of your PodSquadIQ campaign reporting — the same numbers your reporting portal shows — for pulling into Pressboard or any other analytics system automatically. JSON over HTTPS, no SDK required.
Access requires an API key for your account — your account manager issues and rotates them. These docs are public; your data never is.
Authentication
Every request needs your account’s API key (it looks like rk_4f82…). Pass it either way — query parameter ?key=rk_… or header x-api-key: rk_…. Treat it like a password: anyone holding it can read your reporting.
Pulling your reporting
GET https://podsquadiq.com/api/reports/feed
| Parameter | Required | Meaning |
|---|---|---|
| key | yes | Your API key (or send the x-api-key header instead). |
| from, to | no | Inclusive date window, both YYYY-MM-DD (U.S. Eastern Time days). Adds a range block to every item with totals for just those days. |
| daily=1 | no | Adds a daily array to every item — one row per ET day. Combine with from/to to bound it. |
One JSON document comes back, scoped to your account: podcast campaigns under podcasts, editorial / tracked-link media under trackedLinks. Every item carries its mediaNumber — the 6-digit id on every report and invoice, stable for the life of a campaign — plus flight dates, goals, pctOfGoal, campaign-to-date counts (views, plays, qualified listens, downloads, CTA clicks for podcasts; ad impressions and clicks for editorials), and engagements where the editorial measures them — engaged visits on the story page, pixel-measured when a pixel is installed, otherwise 30-second dwell-tag visits (one figure, never both summed) — plus onSite30s/onSite60s, time-on-site depth milestones (visible time), once the dwell tag has fired.
Metric definitions
- Qualified listen — a listener who played 30 seconds or more, or downloaded the episode. Downloads are already included in qualified listens; don’t sum the two columns.
- Deduplication — from Aug 1, 2026, plays, qualified listens, and downloads are counted once per unique listener. Views count page loads.
- Ad impressions — delivery as reported by the ad platforms (API syncs plus uploaded reports), matched by media number.
- Clicks — total clicks: platform-reported plus tracked-redirect clicks, one figure.
- Days — every date in the feed is a U.S. Eastern Time calendar day.
Example
curl "https://podsquadiq.com/api/reports/feed?key=rk_YOUR_KEY&from=2026-08-13&to=2026-08-14&daily=1"
{
"account": "Your Company",
"generatedAt": "2026-08-14T18:22:41.000Z",
"timezone": "America/New_York (ET days)",
"range": { "from": "2026-08-13", "to": "2026-08-14" },
"podcasts": [
{
"mediaNumber": "100007",
"title": "Family Matters: A Conversation with Clint Wurzberger",
"flightStart": "Jul 09, 2026",
"flightEnd": "Aug 09, 2026",
"listenGoal": 236,
"pctOfGoal": 100,
"campaignToDate": {
"views": 4030, "plays": 3828, "qualifiedListens": 236,
"downloads": 10, "ctaClicks": 8
},
"daily": [
{ "date": "2026-08-13", "views": 63, "plays": 51,
"qualifiedListens": 5, "downloads": 1, "ctaClicks": 0 }
]
}
],
"trackedLinks": [
{
"mediaNumber": "100016",
"title": "Got 3 Minutes? It Could Transform Your Life",
"goal": { "unit": "impressions", "value": 500000 },
"pctOfGoal": 64,
"campaignToDate": { "impressions": 322480, "clicks": 1310 }
}
]
}Pulling on a schedule
- Recommended cadence: once daily, after 6 AM ET — by then the previous ET day is complete everywhere in the feed.
- Ad-platform impressions refresh throughout the day (roughly every six hours), so intraday pulls are fine — today’s numbers are partial until the day closes.
- Numbers can revise slightly for a few days as ad platforms restate delivery; re-pulling a trailing window (e.g. the last 7 days) keeps your copy exact.
- Join everything on mediaNumber — it matches your invoices.
Errors are simple: 401 means a missing or invalid key; 200 always carries the full document for your account. Prefer spreadsheets? The portal’s Summary and Daily CSV buttons export the same data by hand — the feed exists so nobody has to.
Pushing your own numbers (optional)
POST https://podsquadiq.com/api/reports/ingest
If you measure delivery on your side and want it reflected back in your reporting, push it with the same key (as the x-api-key header — preferred for a write token, so it stays out of request logs). It’s stored as your self-reported number and shown back to you separately; it never changes the delivery figures PodSquadIQ bills on.
{
"source": "pressboard",
"rows": [
{ "mediaNumber": "100016", "date": "2026-08-14",
"impressions": 125000, "clicks": 412 }
]
}- impressions required; clicks optional — whole non-negative numbers. date is a real ET day, not in the future.
- Up to 1,000 rows per request; re-posting a day corrects it.
- You can only push for campaigns assigned to your account — your account manager assigns them.
- The response itemizes anything skipped (notAssignedToYou, invalidRows) so nothing fails silently. GET the same URL with your key to see everything you’ve pushed.