{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS Feed Reader: No Start Fee, Failed Runs Cost Nothing",
    "description": "Read RSS, Atom and RDF feeds into one dataset with the same columns for all three: title, link, author, date, summary, full content and categories. No start fee, and a run that fails or finds nothing costs nothing. A free dry run shows the price first, and the run stops at a spend cap you set.",
    "version": "0.1",
    "x-build-id": "L2OEc9fLkRno8dObQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/montyburrows~rss-feeds/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-montyburrows-rss-feeds",
        "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/montyburrows~rss-feeds/runs": {
      "post": {
        "operationId": "runs-sync-montyburrows-rss-feeds",
        "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/montyburrows~rss-feeds/run-sync": {
      "post": {
        "operationId": "run-sync-montyburrows-rss-feeds",
        "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",
        "required": [
          "feeds"
        ],
        "properties": {
          "feeds": {
            "title": "Feeds",
            "minItems": 1,
            "maxItems": 200,
            "type": "array",
            "description": "The feed addresses to read, one per line. RSS 2.0, Atom and RDF (RSS 1.0) are all read into the same shape, so a list can mix them freely. Up to 200 per run.",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerFeed": {
            "title": "Newest items per feed",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many of each feed's newest items to take. A per-feed limit exists because feed sizes are uneven and you cannot see it coming: the news and blog feeds measured ranged from 4 items to 71, and some feeds on this reader run to over a thousand.",
            "default": 100
          },
          "publishedAfter": {
            "title": "Only items published since",
            "type": "string",
            "description": "Optional. A date as YYYY-MM-DD, or a number of days back from when the run starts: -1 is the last 24 hours, -7 the last week. This is the field that makes a schedule cheap: a daily run asking for the last day pays for the articles that actually appeared, rather than for a hundred per feed every time. A date stays where you set it, so in a saved task use -1, which moves with every run."
          },
          "includeContentHtml": {
            "title": "Include full content HTML",
            "type": "boolean",
            "description": "Adds each item's complete body markup, where the publisher offers one. Off by default because it is by far the largest field, frequently several kilobytes per row.",
            "default": false
          },
          "includeItemsWithMedia": {
            "title": "Keep items with attached media",
            "type": "boolean",
            "description": "On by default: an article with a podcast or a video attached is still an article. Turn it off to read only the text items. If your list is mostly podcasts, use the Podcast Feed Reader instead. It publishes the duration, the audio URL and the transcript that this listing does not.",
            "default": true
          },
          "dryRun": {
            "title": "Dry run (free cost estimate)",
            "type": "boolean",
            "description": "Read a sample of the feeds, estimate how many item rows a full run returns and what it would cost, then stop. Nothing is written and you are charged nothing.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The most item rows this run may return, across all feeds. The run stops as soon as it is reached. This is a hard cap, not a target.",
            "default": 20000
          },
          "maxCostUsd": {
            "title": "Maximum spend (USD)",
            "minimum": 0.001,
            "type": "number",
            "description": "The most this run may cost you, in US dollars. The run stops before exceeding it. On a scheduled reader this is the number that matters: it is per run, so multiply by how often you run it."
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy configuration. The default (datacentre) is the cheapest option and is all this needs: a feed is a document published in order to be fetched.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyTier": {
            "title": "Proxy pool",
            "enum": [
              "none",
              "datacenter",
              "residential"
            ],
            "type": "string",
            "description": "Datacentre is cheap and fast. Residential costs considerably more and solves a problem this source does not have.",
            "default": "datacenter"
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many requests to run at once against a single host. Each host is read one feed at a time regardless, paced to one request per second.",
            "default": 4
          },
          "maxRequestRetries": {
            "title": "Maximum retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before recording the outcome it failed with.",
            "default": 4
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "How long a single request may take before it is retried. Feeds can be large, so this is more generous than on a page scraper.",
            "default": 60
          },
          "debug": {
            "title": "Debug logging",
            "type": "boolean",
            "description": "Log every request and retry. Useful when opening a support ticket.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}