{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS Feed Reader: Bulk Feeds from a CSV, Google Sheet or Dataset",
    "description": "Returns the newest items (title, link, date, author, summary, image, podcast media) from RSS, Atom and JSON feeds or websites, read from a list, CSV, Google Sheet or dataset, columns kept. Only-new mode. $0.001 per item; failed and repeat items free. Agent-ready via x402 and MCP.",
    "version": "0.1",
    "x-build-id": "ScXa1NgMyLLKJl9Td"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nerolabs~rss-feed-reader/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nerolabs-rss-feed-reader",
        "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/nerolabs~rss-feed-reader/runs": {
      "post": {
        "operationId": "runs-sync-nerolabs-rss-feed-reader",
        "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/nerolabs~rss-feed-reader/run-sync": {
      "post": {
        "operationId": "run-sync-nerolabs-rss-feed-reader",
        "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": {
          "feedUrls": {
            "title": "Feeds or websites",
            "type": "array",
            "description": "RSS, Atom or JSON Feed links, or plain website addresses (the site's own feed is found automatically). One per line. Use the Dataset or File inputs below instead to read a list and keep your own columns next to every item.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset",
            "type": "string",
            "description": "An Apify dataset with one row per feed or website, for example a list of competitor blogs or a lead list with a website column. Every original column is kept on each item row. Use the picker rather than typing an ID."
          },
          "fileUrl": {
            "title": "File or Google Sheet URL",
            "type": "string",
            "description": "A public link to a CSV, TSV, Excel, JSON or JSON Lines file with one row per feed or website. A normal Google Sheets link works: share it as 'Anyone with the link can view'."
          },
          "fileFormat": {
            "title": "File format",
            "enum": [
              "auto",
              "csv",
              "tsv",
              "json",
              "jsonl",
              "xlsx"
            ],
            "type": "string",
            "description": "Leave on 'Detect automatically' unless the link has no file extension and the server reports the wrong content type.",
            "default": "auto"
          },
          "sheetName": {
            "title": "Excel sheet name",
            "type": "string",
            "description": "Which sheet to read from an Excel workbook. Defaults to the first sheet."
          },
          "data": {
            "title": "Rows",
            "type": "array",
            "description": "Rows as inline JSON, an alternative to a dataset or file. Each object needs a field holding a feed or website link."
          },
          "feedField": {
            "title": "Feed column",
            "type": "string",
            "description": "The column holding the feed or website link. Left empty it is detected automatically, preferring columns named feedUrl, feed or rss, then url or website."
          },
          "maxItemsPerFeed": {
            "title": "Items per feed",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The newest items to take from each feed. Feeds usually list 10 to 50; podcasts can list hundreds.",
            "default": 20
          },
          "onlyNewItems": {
            "title": "Only new items",
            "type": "boolean",
            "description": "Remember what was already returned and give only items that are new since the last run. Ideal on a schedule or for an agent checking for news: repeats are never returned or charged. The first run returns the current items.",
            "default": false
          },
          "stateName": {
            "title": "Memory name for 'Only new items'",
            "type": "string",
            "description": "Separate monitors keep separate memories. Use one name per project, for example 'competitor-blogs'. Letters, numbers and dashes.",
            "default": "default"
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Only items published after this date (2026-10-01) or within this period (\"24 hours\", \"7 days\", \"2 weeks\"). Items with no date in the feed are kept."
          },
          "keywords": {
            "title": "Must mention (any of)",
            "type": "array",
            "description": "Keep only items whose title, summary, content or tags mention at least one of these words or phrases. Whole words, not case sensitive: 'AI' matches 'AI' but not 'said'.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Must not mention",
            "type": "array",
            "description": "Drop items that mention any of these words or phrases. Whole words, not case sensitive.",
            "items": {
              "type": "string"
            }
          },
          "includeContent": {
            "title": "Include full content",
            "type": "boolean",
            "description": "Add a 'content' column with the full post text the feed carries (many feeds include whole articles). The summary is always included. For full article text from feeds that only carry a summary, send the links to Bulk Article Extractor.",
            "default": false
          },
          "contentFormat": {
            "title": "Content format",
            "enum": [
              "text",
              "html"
            ],
            "type": "string",
            "description": "Plain text with paragraph breaks, or the feed's own HTML.",
            "default": "text"
          },
          "maxCharsPerItem": {
            "title": "Maximum characters per field",
            "minimum": 200,
            "maximum": 1000000,
            "type": "integer",
            "description": "Summary and content longer than this are cut, so one huge post cannot bloat the dataset.",
            "default": 20000
          },
          "dedupeAcrossFeeds": {
            "title": "Remove duplicate stories",
            "type": "boolean",
            "description": "When the same link appears in two feeds in one run (a story in both 'World' and 'Top stories'), return it once and charge it once.",
            "default": true
          },
          "discoverFeeds": {
            "title": "Find the feed from a website",
            "type": "boolean",
            "description": "When a link is a normal web page, use the feed the page declares, or try the usual addresses (/feed, /rss, /feed.xml and others). Turn off to treat only real feed links as valid.",
            "default": true
          },
          "keep": {
            "title": "Which rows to keep",
            "enum": [
              "all",
              "items",
              "problems"
            ],
            "type": "string",
            "description": "'All rows' also writes one free row per feed that failed (blocked, no feed found, unreachable), so you can see which ones need fixing.",
            "default": "all"
          },
          "keepOriginalFields": {
            "title": "Keep my original columns",
            "type": "boolean",
            "description": "Copy every column from the input row onto each item from that feed, so items line up with your own data (client, topic, owner). Turn off for feed fields only.",
            "default": true
          },
          "exportFormats": {
            "title": "Export files",
            "type": "array",
            "description": "Also write the items as a downloadable CSV or Excel file, linked from the run's output. $0.01 per file, charged only when the run delivered at least one item.",
            "items": {
              "type": "string",
              "enum": [
                "csv",
                "xlsx"
              ],
              "enumTitles": [
                "CSV",
                "Excel (xlsx)"
              ]
            },
            "default": []
          },
          "outputDatasetName": {
            "title": "Append to named dataset",
            "type": "string",
            "description": "Also append every row to a named dataset that persists across runs, building one growing archive of items. Not charged again."
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "POST the run summary and the first 50 new items to this URL when the run finishes, for Slack, Zapier, Make, n8n or your own API. Sent only when the run delivered at least one item; charged only on a confirmed 2xx response."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Off by default and rarely needed for feeds. Apify residential proxy can help with feeds blocked by address or country and adds $0.003 per feed that returns items through it.",
            "default": {
              "useApifyProxy": false
            }
          },
          "concurrency": {
            "title": "Feeds at a time",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many feeds to read in parallel. Never more than two at a time go to any one site.",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Feed timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one feed before giving up. A timed-out feed is never charged.",
            "default": 30
          },
          "maxFeedMb": {
            "title": "Maximum feed size",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Feeds larger than this are skipped (free). Big podcast feeds with hundreds of episodes can reach 20 to 30 MB.",
            "default": 30
          },
          "maxItems": {
            "title": "Max items in total",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "A hard ceiling on items delivered (and charged) across all feeds in one run."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}