Apple Podcast Directory & RSS Contacts Scraper avatar

Apple Podcast Directory & RSS Contacts Scraper

Pricing

from $1.00 / 1,000 podcast results

Go to Apify Store
Apple Podcast Directory & RSS Contacts Scraper

Apple Podcast Directory & RSS Contacts Scraper

Search Apple podcasts or read public RSS feeds. Export show metadata, published owner contacts with source details, and recent episode data.

Pricing

from $1.00 / 1,000 podcast results

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

16 days ago

Last modified

Categories

Share

Export Apple podcast directory metadata and public RSS contacts with the feed field and URL behind each contact. Search by keyword, use an Apple ID, or supply a public RSS/Atom feed. A contact can be missing. This Actor does not guess emails.

Apple Podcast Directory and RSS Contacts Scraper: search or paste a feed, read published contacts with their source, and export podcast rows

On this page: Quick start · Use cases · Input · Output · Pricing · Limits · API and export · Troubleshooting · FAQ · Support

What it does

The Actor reads public Apple/iTunes catalog data and public RSS 2.0 or Atom feeds. It saves one row per unique podcast candidate. It can return title, author, feed URL, dates, categories, published owner contacts, and recent episode metadata. Each contact has a source field and feed URL.

It is a good fit for podcast research, a small directory export, and checking the source of an outreach list. It does not send messages. A public email is not proof of consent to contact its owner.

It does not collect Spotify data, reviews, charts, audience size, phone numbers, or social contacts. It does not crawl websites or download audio, video, images, transcripts, or enclosure files. It does not read private or paid feeds. This is an independent tool, not an Apple product.

Quick start

  1. Open Input. The new form suggests Apple podcast ID 1253186678 (Syntax).
  2. Leave the suggested ID for a small first run, or replace it with your source.
  3. Start the Actor. Open Results to see the Dataset.
  4. Read status, partial, and the contact source fields before using a row.

The same small API input is:

{"applePodcastIds":["1253186678"]}

The form suggestion is a prefill, not an API default. API input {} does not select a demo podcast. It returns invalid-input accounting without source requests. The US country, 50-result limits, and other runtime defaults still apply to omitted options.

Use cases

JobInputFields to use
Find shows about a topicsearchQueries, countryapplePodcastId, title, matchedQueries
Check a known showapplePodcastIds or applePodcastUrlsfeedUrl, status, latestEpisodeDate
Check a public RSS contactfeedUrlsownerEmail, contactEmail, contactSourceField, contactSourceUrl
Build a recent-show shortlistactiveOnly, activityWindowDaysactive, activeAsOf, frequency
Review recent episodesincludeEpisodes, maxEpisodesPerPodcastepisodes, episodesReturned, truncationReasons

For a small topic search:

{"searchQueries":["syntax"],"country":"us","maxPodcastsPerQuery":2,"maxPodcasts":4,"includeEpisodes":true,"maxEpisodesPerPodcast":2}

For direct feeds, use {"feedUrls":["https://feed.syntax.fm/rss"]}. Source URLs can move over time.

Input reference

All fields are optional by name, but at least one source list must contain a valid entry. There are no nested option objects. Array item rules are shown below. An empty source list adds no work. Invalid entries get safe accounting; other valid entries can still run.

FieldTypeRuntime defaultNew-form prefillValues and effect
searchQueriesstring[][]noneUp to 20 strings, 1–256 characters each. Spaces and Unicode are normalized; repeated queries are merged.
applePodcastIdsstring[][]["1253186678"]Up to 100 decimal strings, 1–12 digits each. Leading zeros are normalized.
applePodcastUrlsstring[][]noneUp to 100 HTTPS podcasts.apple.com URLs with an id path. Pages are not fetched; the ID is read from the URL.
feedUrlsstring[][]noneUp to 100 public HTTP/HTTPS strings, at most 2,048 characters each. Ports 80/443 only. No passwords or token-like query parameters.
countrystring"us"noneForm choices: us, gb, ca, au, de, fr, es, it, nl, br, in, jp. API accepts any two-letter code; source coverage varies.
maxPodcastsPerQueryinteger50noneInteger 1–100. Bound requested for each Apple search; not a page count.
maxPodcastsinteger50noneInteger 1–100. Global candidate limit after input identity deduplication; it is not a guaranteed number of rows.
includeEpisodesbooleanfalsenoneBoolean. Include episode metadata inside each show row.
maxEpisodesPerPodcastinteger5noneInteger 1–10. Used only when includeEpisodes is true.
activityWindowDaysinteger90noneInteger 1–365. Compare the newest valid feed date with this day window.
requireOwnerEmailbooleanfalsenoneBoolean. Keep only rows with an explicit valid itunes owner email; editor/webmaster email does not pass.
activeOnlybooleanfalsenoneBoolean. Keep only rows whose calculated active value is true. Unknown and stale rows are filtered.

Sources can be combined. Apple IDs and URLs for the same ID are merged. A direct feed with the same normalized URL as an Apple feed can merge with it. Titles are not identity keys. Different URLs that redirect to the same feed can remain separate rows. Filters run after reading the feed; they do not avoid source work or the start charge. If both filters are on, both must pass.

Empty strings, null source entries, wrong types, and out-of-range options add invalid-input accounting. The Actor does not silently turn an invalid source into the demo. Runtime normalization can trim valid text; the Input form applies its schema before a run starts.

Output reference

The default Dataset has one row per unique candidate, with episodes in an array when requested. A diagnostic row can exist without a useful feed result. A keyword search with no matches has no row. Open the Output links for Results and Run summary. The default key-value store also contains OUTPUT (links and status) and RUN_SUMMARY (counts, limits, retries, timing, charge and safe error codes).

Example result

This trimmed row is from the same Syntax Apple ID used in Quick start. Contact values are omitted from this example. The source feed published an owner contact when checked on October 9, 2026. Live values can change.

{
"stableId": "apple:1253186678",
"applePodcastId": "1253186678",
"title": "Syntax - Tasty Web Development Treats",
"feedUrl": "https://feeds.megaphone.fm/FSI1483080183",
"feedFormat": "rss",
"status": "PARTIAL",
"contactStatus": "owner_present",
"contactSourceField": "itunes:owner/itunes:email",
"contactSourceUrl": "https://feeds.megaphone.fm/FSI1483080183",
"partial": true,
"truncationReasons": ["FEED_ITEM_LIMIT"],
"episodesReturned": 0,
"episodes": []
}

Podcast fields

Unknown text, dates, and facts use JSON null. Arrays can be empty. A measured zero is a number; it is not an unknown value. Diagnostic rows may have fewer facts. Times are UTC ISO strings. Descriptions are plain bounded text, with markup removed. Source descriptions can still contain encoded text. Metadata links are returned as facts and are not fetched.

FieldTypeMeaning
stableIdstringStable Apple ID or feed hash; never a raw credential-bearing URL.
statusstringTerminal product status.
statusReasonstring or nullSafe machine-readable status code.
sourceKindsarrayAccepted source adapters used for the row.
matchedQueriesarrayNormalized Apple queries that matched the row.
inputRefsarrayOpaque input references.
applePodcastIdstring or nullApple collection ID.
applePodcastUrlstring or nullCatalog URL returned by Apple; not fetched.
feedUrlstring or nullPublic feed URL read for this row.
feedHoststring or nullHost-only feed diagnostic.
feedFormatstring or nullrss or atom.
titlestring or nullPodcast title.
authorstring or nullPodcast author.
publisherstring or nullPublisher fact when available.
descriptionstring or nullPlain show description when available.
languagestring or nullFeed language.
storefrontCountrystring or nullRequested Apple storefront.
categoriesarrayShow categories.
artworkUrlstring or nullMetadata URL only; never downloaded.
websiteUrlstring or nullPublished metadata link only; never fetched.
episodeCountReportedinteger or nullCatalog-reported count.
feedItemsObservedinteger or nullMapped distinct feed items under bounds.
episodesReturnedintegerNested episodes returned.
latestEpisodeDatestring or nullNewest valid feed date.
appleLatestReleaseDatestring or nullApple catalog release date.
activeboolean or nullCalculated activity flag.
activeAsOfstring or nullUTC clock used for activity calculation.
activityWindowDaysinteger or nullActivity rule window.
frequencystring or nullCalculated frequency bucket.
frequencyBasisstring or nullRule used for the frequency calculation.
medianGapDaysnumber or nullCalculated median gap.
ownerNamestring or nullExplicit feed owner name.
ownerEmailstring or nullExplicit itunes owner email only.
contactEmailstring or nullExplicit alternate feed contact.
contactRolestring or nullowner, editor or webmaster.
contactStatusstring or nullExplicit contact result.
contactSourceFieldstring or nullExact feed field that supplied the contact.
contactSourceUrlstring or nullFeed URL supporting the contact.
descriptionSourcestring or nullapple, rss, atom or unknown.
fieldProvenanceobjectField-level fact/calculation markers.
episodesarrayRecent episode details kept inside the row.
partialbooleanWhether an explicit output bound reduced completeness.
truncationReasonsarrayBound codes.
warningsarraySafe diagnostic codes.
observedAtstringUTC observation time.

stableId uses an Apple ID when known, otherwise a SHA-256 hash of the normalized feed URL. Synthetic invalid/not-found rows use an input hash. inputRefs are opaque input references. Changing a feed URL can change a feed-only ID.

ownerEmail comes only from itunes:owner/itunes:email. contactEmail is an alternate from managingEditor or webMaster. Only the first valid contact by that order is returned, not a list of every email. An author name or email in a description is not a contact source. No social-link extraction is supported; websiteUrl is the feed's published site link. contactStatus is owner_present, alternate_present, absent, invalid, or unknown. Provenance is stored even when a row is partial. fieldProvenance maps fields to feed, Apple, calculated, source, or unknown markers.

frequency is daily, weekly, biweekly, monthly, irregular, or null. It uses median gaps from up to ten recent valid dates; at least three dates are needed. It is an estimate, not the publisher's schedule. active is true/false/null and is checked at activeAsOf. Future dates are ignored with a warning.

Nested episode fields

FieldTypeMeaning
episodeStableIdstringHash of the GUID when present, otherwise a deterministic title/date fallback.
titlestring or nullAt most 512 characters.
descriptionstring or nullPlain text, at most 1,000 characters.
publishedAt, updatedAtstring or nullValid source dates in UTC ISO format.
guidstring or nullSource identifier, at most 512 characters; not fetched.
permalinkstring or nullPublic HTTP/HTTPS link, not fetched.
episodeNumber, seasonNumberinteger or nullExplicit feed values.
episodeTypestring or nullExplicit type, usually full, trailer, or bonus.
durationSecondsinteger or nullDuration parsed from the feed, in seconds.
enclosureTypestring or nullMedia type attribute only.
enclosureLengthinteger or nullLength attribute in bytes when within supported bounds.

Enclosure URLs and media bytes are not returned. Episodes are sorted by valid date within the inspected feed window. Duplicate GUIDs are merged.

Status, empty and partial results

StatusWhat happenedResult charge
PODCAST_FOUNDParsed feed with an explicit owner or alternate contact.One result.
NO_OWNER_CONTACTFeed read, but no valid owner email; an alternate contact can exist.One result.
PARTIALParsed feed data with an item, byte, text, episode or other bound.One parsed feed result.
NO_FEEDCatalog candidate has no usable feed.No result event.
NOT_FOUNDSpecific Apple lookup has no record.No result event.
INVALID_INPUTInvalid input entry; no request for that entry.No result event.
BLOCKEDUnsafe destination, authentication, access denial, or prohibited content.No result event.
TRANSIENT_ERRORTimeout, rate limit or temporary error after bounded retries.No result event.
TECHNICAL_ERRORUnsupported response, malformed XML or other technical failure.No result event.

A valid empty keyword search is counted as UPSTREAM_EMPTY in RUN_SUMMARY. Filters can produce an empty Dataset with filteredOut > 0. These differ from technical failures. Do not treat a successful platform status alone as proof of complete data. Check rows, status reasons, unprocessed candidates and the terminal summary.

Pricing

The applied price is USD 0.0132 per Actor start + USD 0.001 per parsed podcast result (USD 1 per 1,000 result events). Platform usage is included; it is not billed separately to buyers. Episodes have no separate event.

The standard apify-actor-start event is automatic. At the default 512 MB, it is charged once. Up to 1 GB it is charged once; larger memory allocations charge one start event per GB, rounded up. The Actor does not manually charge a second start.

Scenario at 512 MBStart eventsResult eventsTotal charge
One parsed show11USD 0.0142
Ten parsed shows110USD 0.0232
100 parsed shows in one run1100USD 0.1132
1,000 parsed shows in ten 100-show runs101,000USD 1.132
Valid zero-result search10USD 0.0132
All shows filtered out10USD 0.0132
Diagnostic-only failure after start10USD 0.0132

Only parsed-feed rows with PODCAST_FOUND, NO_OWNER_CONTACT, or PARTIAL trigger podcast-result. Technical, blocked, missing-feed, not-found and invalid rows are not charged as results. A partial or failed run can still charge for parsed results already saved and for its start. No-contact results are useful parsed rows and are charged. Repeated runs are new snapshots and are charged again; there is no unchanged-monitor discount or monitor mode.

Set a platform maximum cost per run that includes the start charge. A cap below the start price may prevent work. maxPodcasts bounds candidates, not total charge: result estimates alone exclude the start. A cost cap can stop a run early, so check RUN_SUMMARY.charge.stoppedAtLimit and unprocessed counts. Source changes can alter how many parsed results a search returns.

Limits

At most 20 queries, 100 IDs, 100 Apple URLs, 100 feed URLs, 100 results per query, and 100 unique candidates per run. There is no page cursor or whole-directory export. Reaching a catalog cap is recorded in the summary. Source search order can change.

The Actor inspects up to 50 feed items and may read the next item to detect truncation. Thus feedItemsObserved may show 51. Long feeds return useful PARTIAL metadata rather than a full archive. At most ten episodes are returned per show. Titles use up to 512 characters and show descriptions up to 2,000.

Feed limits include 2 MiB compressed, 8 MiB decompressed, 64 KiB field text, 10,000 XML nodes, depth 128 and three redirects. Every destination and redirect is checked against the public-address policy. DTD/XXE is rejected. Requests use at most two feed attempts or three Apple attempts, with fixed time bounds. Apple calls are serialized at 15 per minute; feed concurrency is four globally and two per initial host. Slow sources and source changes can cause partial or failed results.

Default run resources are 512 MB and 900 seconds. Internal source work stops within 840 seconds and sooner before a smaller platform timeout. A larger platform timeout does not extend that deadline. Cancellation saves accounting when possible. Invalid resource options produce a separate RESOURCE_ERROR summary.

API and export

Start this Actor with the Apify API, passing the same JSON as in Quick start. Read the run's default Dataset or the Results output link. Export JSON, CSV or Excel from Dataset; nested episodes and provenance are best kept as JSON. Use stableId to join show rows and observedAt to label each snapshot.

You can schedule the same input in Apify Console and read the new Dataset after each run. Each run is a fresh snapshot: this Actor has no only-new mode, persistent diff state, CRM action or outreach integration. Scheduling and webhooks are platform features; they are not created by this Actor.

Troubleshooting

  • No owner email: check contactStatus and the exact source field. The publisher may not include an owner email. An editor email does not pass requireOwnerEmail.
  • Empty Results: check UPSTREAM_EMPTY, filteredOut, invalid entries and technical statuses in RUN_SUMMARY. Try a known Apple ID to separate search scope from a feed problem.
  • PARTIAL: read truncationReasons. A long feed can provide valid show and contact metadata without a full archive.
  • BLOCKED: use a public feed URL without credentials. The Actor cannot read private addresses, authenticated feeds or unsafe redirects.
  • Temporary failure: source rate limits and availability can change. Retry a small input later. Do not raise limits to work around a block.
  • Missing dates or frequency: fewer than three distinct valid dates make frequency unknown. Activity is unknown when no valid date exists.

FAQ

Do I need an Apple or Spotify account?

No source account or API key is needed. Spotify is not supported. You need an Apify account to start a run.

Does every podcast have an email?

No. Only explicit public feed contact fields are read. The Actor does not infer emails, verify mailboxes, search websites, or promise current contacts.

Can I download audio or every episode?

No. The Actor reads bounded metadata only. Audio URLs are not returned. It does not provide a complete episode archive.

Will two runs return the same data?

Live catalogs and feeds can change. IDs and deduplication rules stay stable for the same sources; dates, order, contacts and activity can change. Each run has its own observation time.

Can I use a contact for outreach?

A public contact does not establish consent. Check the source, purpose and applicable rules before contacting anyone. The Actor does not send emails or fill forms.

RSS & Atom Feed Reader / Monitor reads feed items and tracks changes when your next step is item monitoring rather than podcast contact research.

Support

Open an issue in this Actor's Apify Store Issues tab. Include the run ID, input mode, country, and safe RUN_SUMMARY code. Never post tokens, cookies, raw feed bodies, private URLs, or full contact values.