Podseeker API

The podcast contact and outreach API. Built for automation.

Podseeker provides programmatic access to a curated database of active, contactable podcasts with verified contact emails, booking difficulty ratings, host information, and audience data. Dormant and low-quality shows are filtered out so agents only work with podcasts worth pitching.

Base URL

https://app.podseeker.co/api/v1

Authentication

All requests require a Bearer token in the Authorization header.

Authorization: Bearer ps_your_api_key_here

Get your API key by signing up and selecting the API plan. You can manage your keys at any time in Account Settings → API.

Pricing & Credits

$99

per month

2,000

credits included

$0.05

per overage credit

1 credit = search or detail call. 10 credits = contact enrichment (refunded automatically if it fails or finds no contacts). 100 free credits to try. Usage headers are included in every response, and GET /api/v1/usage returns your authoritative balance any time.

# Response headers
X-Credits-Used: 142
X-Credits-Included: 2000
X-Credits-Remaining: 1858
X-Overage-Credits: 0
X-Overage-Charge: 0.0

Rate Limits

60 requests per minute per organization. Exceeding this returns 429 Too Many Requests with a Retry-After: 60 header.

GET

/podcasts/search

Search for podcasts matching a query with optional filters. Returns up to 50 results per page.

Parameters

Parameter Type Description
query string Search term, e.g. "health", "entrepreneurship", "AI"
active boolean Filter for active podcasts (episode within last 2 months)
has_guest boolean Filter for podcasts that accept external guests
has_email boolean Filter for podcasts with verified contact emails
topic string[] Filter by topic tag. Top topics: entrepreneurship, leadership, mental health, wellness, coaching, parenting, finance, real estate. Use query for discovery — topic is for narrowing by exact tag.
location string[] Filter by location: usa, uk, au, ca, ie, sg, nz, za
booking_difficulty string[] Filter by difficulty: very_low, low, medium, high, very_high, not_applicable
gender_skew string[] Filter by audience gender: male, female, neutral
listener string[] Filter by listener range: <100, 100-1k, 1k-10k, 10k-100k, 100k-1m, >1m
sort string listeners_desc, listeners_asc, latest_episode_desc, latest_episode_asc, youtube_subscribers_desc, instagram_followers_desc
page integer Page number (0-99). 50 results per page, max 5,000 results.

Example Request

curl -H "Authorization: Bearer ps_your_key" \
  "https://app.podseeker.co/api/v1/podcasts/search?query=entrepreneurship&active=true&has_guest=true&has_email=true"

Example Response

{
  "podcasts": [
    {
      "id": 625373,
      "title": "Highest Self Podcast",
      "publisher": "Sahara Rose",
      "description": "A wellness and personal growth show...",
      "artwork_url": "https://...",
      "topics": ["Wellness", "Entrepreneurship", "Mindset"],
      "location": "USA",
      "estimated_listeners": 48000, // rounded estimate per episode
      "episode_count": 520,
      "episode_frequency": "weekly",
      "latest_episode_date": "2026-05-10T07:00:00.000Z",
      "rating": 4.89,
      "has_guests": true,
      "has_email": true,
      "booking_difficulty": "medium"
    }
  ],
  "total": 5000,
  "page": 0,
  "per_page": 50,
  "total_pages": 100
}
GET

/podcasts/:id

Get full details for a single podcast, including verified contact emails, official website, RSS feed, host bios, guest caliber requirements, and social stats.

Example Request

curl -H "Authorization: Bearer ps_your_key" \
  "https://app.podseeker.co/api/v1/podcasts/625373"

Example Response

{
  "podcast": {
    "id": 625373,
    "title": "Highest Self Podcast",
    "publisher": "Sahara Rose",
    "description": "A wellness and personal growth show...",
    "website_url": "https://sahararose.com",
    "rss_url": "https://...",
    "topics": ["Wellness", "Entrepreneurship", "Mindset"],
    "categories": ["Health & Fitness", "Self-Improvement"],
    "location": "USA",
    "estimated_listeners": 48000, // rounded estimate per episode
    "episode_count": 520,
    "episode_frequency": "weekly",
    "rating": 4.89,
    "booking_difficulty": "medium",
    "hosts": [
      {
        "full_name": "Sahara Rose",
        "role": "Host",
        "professional_bio": "Bestselling author and wellness expert..."
      }
    ],
    "guest_caliber": {
      "prominence_level": "established_expert",
      "booking_difficulty": "medium",
      "typical_credentials": "Authors, coaches, and wellness practitioners...",
      "typical_achievements": ["published books", "coaching practice"]
    },
    "contacts": {
      "primary_email": "[email protected]",
      "all_emails": ["[email protected]"],
      "has_contact_form": true,
      "enriched_contacts": null // null if not enriched, or object with people array
    },
    "social": {
      "youtube_subscribers": 185000,
      "instagram_followers": 1420000
    }
  }
}
POST

/podcasts/:id/enrich

Trigger contact enrichment for a podcast. Finds direct contacts (hosts, producers, bookers) with emails. Costs 10 credits. Takes 60-120 seconds. Check GET /podcasts/:id first - if enriched_contacts already has data, you may not need to re-enrich. If an enrichment fails or finds no contacts, the 10 credits are automatically refunded - you only pay when it produces contacts. A successful enrichment enters a 30-day cooldown; re-enriching before then returns a 429.

Example Request

curl -X POST -H "Authorization: Bearer ps_your_key" \
  "https://app.podseeker.co/api/v1/podcasts/625373/enrich"

Example Response 202 Accepted

{
  "enrichment_id": "enr_42",
  "status": "enriching",
  "estimated_seconds": 120,
  "podcast_id": 625373
}

After enrichment completes GET /podcasts/:id returns

{
  "contacts": {
    "primary_email": "[email protected]",
    "all_emails": ["[email protected]"],
    "has_contact_form": true,
    "enriched_contacts": {
      "last_updated_at": "2026-05-22",
      "people": [
        {
          "name": "Sahara Rose",
          "role": "Host / Founder",
          "email": "[email protected]",
          "linkedin_url": "https://linkedin.com/in/sahararose",
          "contact_confidence": "very_high"
        }
      ]
    }
  }
}

Contact Confidence Levels

LevelDescription
very_highDedicated booker, talent coordinator, or host of small show
highExecutive producer, managing producer
mediumGeneral producer, host on large show
lowTangential role, may not handle inbound
very_lowSound engineer, editor, unlikely to respond to outreach
GET

/enrichments/:enrichment_id

Poll for enrichment completion. Free - no credit cost. Use the enrichment_id returned by the enrich endpoint. Status is processing, completed, or failed. When no contacts are found or the run fails, the response includes a note confirming the 10 credits were refunded.

Example Request

curl -H "Authorization: Bearer ps_your_key" \
  "https://app.podseeker.co/api/v1/enrichments/enr_42"

Response - Processing

{
  "enrichment_id": "enr_42",
  "status": "processing",
  "podcast_id": 625373,
  "estimated_seconds": 120
}

Response - Completed

{
  "enrichment_id": "enr_42",
  "status": "completed",
  "podcast_id": 625373
}

Response - Completed, no contacts 10 credits refunded

{
  "enrichment_id": "enr_42",
  "status": "completed",
  "podcast_id": 625373,
  "note": "No direct contacts found for this podcast. The 10 credits for this enrichment were refunded."
}

Response - Failed 10 credits refunded

{
  "enrichment_id": "enr_42",
  "status": "failed",
  "podcast_id": 625373,
  "note": "Enrichment failed. The 10 credits for this enrichment were refunded. Please retry."
}

Once completed, fetch the podcast detail (GET /podcasts/:id) to get the enriched contacts in the response.

GET

/usage

Your current credit balance, on demand. Free - no credit cost - and strongly consistent (it reads the committed ledger). Use this to check your balance any time instead of reading it off another call's headers - ideal if you meter usage on behalf of your own customers.

Example Request

curl -H "Authorization: Bearer ps_your_key" \
  "https://app.podseeker.co/api/v1/usage"

Example Response

{
  "credits_used": 142,
  "credits_included": 2000,
  "credits_remaining": 1858,
  "overage_credits": 0,
  "overage_charge": 0.0,
  "plan": "API Monthly",
  "status": "active",
  "period_end": "2026-07-15T00:00:00Z"
}

On a paid plan, period_end is when your monthly credits reset. It's null during a trial, since trial credits are a fixed allotment with no scheduled reset - you move to the paid plan when you use them up.

Typical Agent Workflow

  1. 1

    Search for podcasts matching your client's niche

    GET /podcasts/search?query=leadership&has_email=true&active=true
  2. 2

    Select best fits based on booking difficulty, audience size, and guest caliber

    Match your credentials to the podcast's typical guest profile for higher success rates

  3. 3

    Get full details for selected podcasts

    GET /podcasts/:id
  4. 4

    Enrich contacts for direct outreach (optional, 10 credits)

    POST /podcasts/:id/enrich → poll GET /enrichments/:id → re-fetch GET /podcasts/:id
  5. 5

    Use contacts and host information to craft personalized pitches

    Reference the host by name, mention relevant recent topics, and match your client's credentials to the show's guest caliber

Error Codes

Code Meaning
401 Invalid or missing API key
403 API key is inactive or revoked
402 Credit limit or max spend cap reached, or API subscription inactive
404 Podcast not found
422 Invalid search parameter(s). Body includes a details array of {param, given, allowed}. No credit charged.
429 Rate limit exceeded (60 req/min)