{
  "slug": "podcast-feed-parser",
  "name": "gizza-ai/podcast-feed-parser",
  "version": "0.1.0",
  "title": "Podcast Feed Parser — RSS/XML episode list to JSON — gizza.ai",
  "description": "Parse a pasted podcast RSS/XML feed into clean JSON with episode titles, dates, durations, and audio enclosure URLs. Free, private, in-browser.",
  "tags": [
    "podcast",
    "rss",
    "xml",
    "feed",
    "itunes",
    "episodes",
    "json"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/podcast-feed-parser/",
    "markdown": "https://gizza.ai/tools/podcast-feed-parser/index.md",
    "descriptor": "https://gizza.ai/tools/podcast-feed-parser/tool.json",
    "deep_link_example": "https://gizza.ai/tools/podcast-feed-parser/?feed=%3Crss%20version%3D%222.0%22%3E%3Cchannel%3E%3Ctitle%3EExample%20Podcast%3C%2Ftitle%3E%3Citem%3E%3Ctitle%3EEpisode%201%3C%2Ftitle%3E%3Cenclosure%20url%3D%22https%3A%2F%2Fexample.com%2Fep1.mp3%22%20type%3D%22audio%2Fmpeg%22%20%2F%3E%3C%2Fitem%3E%3C%2Fchannel%3E%3C%2Frss%3E&limit=0&order=feed&include_descriptions=true"
  },
  "cli": "gizza tool podcast-feed-parser '<rss version=\"2.0\"><channel><title>Example Podcast</title><item><title>Episode 1</title><enclosure url=\"https://example.com/ep1.mp3\" type=\"audio/mpeg\" /></item></channel></rss>'",
  "tool": {
    "description": "Parse a pasted podcast RSS/XML feed into a clean, structured episode list. Accepts RSS 2.0 feeds (including the iTunes podcast namespace) and Atom 1.0 feeds. Returns the channel-level metadata (title, description, author, link, cover image, language) plus an `episodes` array where each entry carries the title, publish date (normalised to RFC 3339 in `published`, with the original kept in `published_raw`), duration (normalised `HH:MM:SS` in `duration` plus whole seconds in `duration_seconds`), the audio enclosure URL/MIME-type/byte-size (`audio_url`, `audio_type`, `audio_length_bytes`), GUID, episode page link, season/episode numbers, and explicit flag. Empty/optional fields are omitted. Use `limit` to cap the number of episodes (0 = all), `order` to sort by publish date ('feed' keeps original order, 'newest', or 'oldest'), and `include_descriptions` to add each episode's plain-text summary. Fully local and deterministic — no network fetch, no AI model: paste the feed XML you already have.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "feed": {
          "description": "The podcast RSS/XML feed to parse, pasted as text. Accepts RSS 2.0 (with the iTunes podcast namespace) and Atom 1.0 feeds.",
          "type": "string"
        },
        "include_descriptions": {
          "default": false,
          "description": "Include each episode's plain-text description/summary in the output. Default false (kept out to keep the list compact).",
          "type": "boolean"
        },
        "limit": {
          "default": 0,
          "description": "Maximum number of episodes to return. 0 (default) returns every episode.",
          "minimum": 0,
          "type": "integer"
        },
        "order": {
          "default": "feed",
          "description": "Episode order: 'feed' keeps the feed's original order (usually newest first), 'newest' sorts by publish date descending, 'oldest' ascending. Default 'feed'.",
          "enum": [
            "feed",
            "newest",
            "oldest"
          ],
          "type": "string"
        }
      },
      "required": [
        "feed"
      ],
      "type": "object"
    }
  }
}