{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS Feed Reader & RSS to JSON Converter - Bulk Atom Parser",
    "description": "RSS feed reader and RSS to JSON converter: read many RSS and Atom feeds in one run. Paste feed or website URLs (feeds are autodiscovered), get title, link, date, author, summary, categories, image as clean JSON. $0.30 per 1,000 items.",
    "version": "0.1",
    "x-build-id": "slnI3aWlV7SzoGkDQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pennydata~rss-atom-feed-reader-bulk/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pennydata-rss-atom-feed-reader-bulk",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/pennydata~rss-atom-feed-reader-bulk/runs": {
      "post": {
        "operationId": "runs-sync-pennydata-rss-atom-feed-reader-bulk",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/pennydata~rss-atom-feed-reader-bulk/run-sync": {
      "post": {
        "operationId": "run-sync-pennydata-rss-atom-feed-reader-bulk",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "urls": {
            "title": "Feed or website URLs",
            "type": "array",
            "description": "RSS 2.0, Atom or JSON Feed URLs. If a URL is an ordinary web page, the actor looks for a <link rel=\"alternate\"> feed in its HTML (and common paths such as /feed, /rss.xml, /atom.xml) and reads that.",
            "default": [
              "https://github.blog/feed/"
            ],
            "items": {
              "type": "string"
            }
          },
          "sinceDate": {
            "title": "Only items since (date)",
            "type": "string",
            "description": "Optional. ISO date or date-time (e.g. 2026-10-01 or 2026-10-01T12:00:00Z). Items published before it are skipped and not charged. Items without a date are kept."
          },
          "since": {
            "title": "Since (alias of sinceDate)",
            "type": "string",
            "description": "Alias of sinceDate. ISO date or date-time."
          },
          "maxItemsPerFeed": {
            "title": "Max items per feed",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Newest items to return per feed. Also caps what you are charged per feed.",
            "default": 20
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "read",
              "discover"
            ],
            "type": "string",
            "description": "read (default): return feed items. discover: find every RSS, Atom or JSON feed a website advertises, validate each and return one row per feed (title, format, item count, latest item date). Same per-result price, empty sites cost nothing.",
            "default": "read"
          },
          "feedUrls": {
            "title": "Feed URLs (alias of urls)",
            "type": "array",
            "description": "Alias of \"urls\"; both lists are merged and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords filter",
            "type": "array",
            "description": "Optional. Keep only items whose title or summary contains any of these words (case-insensitive). Filtered-out items are not charged.",
            "items": {
              "type": "string"
            }
          },
          "includeContent": {
            "title": "Include full content",
            "type": "boolean",
            "description": "Add a `content` field with the full item body (content:encoded / Atom content) when the feed provides it.",
            "default": false
          },
          "dedupe": {
            "title": "De-duplicate across feeds",
            "type": "boolean",
            "description": "Skip items whose guid/link already appeared in an earlier feed of this run.",
            "default": false
          },
          "publishedAfter": {
            "title": "Published after (alias of sinceDate)",
            "type": "string",
            "description": "Alias of sinceDate."
          },
          "filterByDate": {
            "title": "Only items newer than (alias of sinceDate)",
            "type": "string",
            "description": "Alias of sinceDate."
          },
          "fetchTimeoutSeconds": {
            "title": "Fetch timeout per URL (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "HTTP timeout per feed request, 5 to 120.",
            "default": 25
          },
          "onlyNew": {
            "title": "Only new items (monitoring mode)",
            "type": "boolean",
            "description": "Return only entries not seen in a previous run. Seen entry IDs (guid or link) are remembered per feed URL in a named key-value store, so a daily schedule yields just the new entries, and you are charged only for those. The first run returns the current items (up to Max items per feed) and sets the baseline.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store holding the seen-entry IDs for onlyNew. Use different names for different monitors.",
            "default": "rss-seen-state"
          },
          "webhookUrl": {
            "title": "Webhook URL (Slack / Discord / any)",
            "type": "string",
            "description": "Optional. After the run, POST the emitted items to this URL in batches of up to 10 items per message. Slack and Discord incoming-webhook URLs get a readable message; any other URL gets JSON {count, items}. Combine with Only new items on a schedule for an alert bot. Failed or rate-limited posts are retried once and never fail the run. Leave empty for no webhook."
          },
          "webhookFormat": {
            "title": "Webhook format",
            "enum": [
              "auto",
              "slack",
              "discord",
              "generic"
            ],
            "type": "string",
            "description": "auto (default) detects Slack and Discord by host; or force slack, discord or generic JSON.",
            "default": "auto"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}