{
  "openapi": "3.0.1",
  "info": {
    "title": "RSS & Atom Feed Scraper — Any Feed to Clean JSON (Bulk)",
    "description": "Turn any RSS, Atom or JSON Feed (or a website URL, feed auto-discovered) into clean JSON: title, link, summary, content, author, date, categories, images. Bulk feeds, whole-word keyword include/exclude, date window, dedupe, sort, only-new monitoring, optional full article text. No API key.",
    "version": "0.1",
    "x-build-id": "hsCjlkYzjaCqqUy9A"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yadroo~rss-to-json/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yadroo-rss-to-json",
        "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/yadroo~rss-to-json/runs": {
      "post": {
        "operationId": "runs-sync-yadroo-rss-to-json",
        "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/yadroo~rss-to-json/run-sync": {
      "post": {
        "operationId": "run-sync-yadroo-rss-to-json",
        "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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "Feed or site URLs",
            "type": "array",
            "description": "RSS 2.0, RSS 1.0 (RDF), Atom or JSON Feed URLs — or plain website URLs: the feed is auto-discovered from <link rel=\"alternate\"> and common paths (/feed, /rss.xml, /atom.xml…). Up to a few hundred URLs per run; fetched 4 at a time.",
            "items": {
              "type": "string"
            }
          },
          "discoverFeeds": {
            "title": "Auto-discover feed from website URLs",
            "type": "boolean",
            "description": "If a URL returns an HTML page, look for its feed. Off = HTML pages are reported as errors.",
            "default": true
          },
          "includeKeywords": {
            "title": "Include keywords",
            "type": "array",
            "description": "Keep only items mentioning these words/phrases (case-insensitive, whole words: \"ai\" does not match \"StarCraft\"). Add a trailing * for prefixes: \"invest*\". Matched words are returned in keywordsMatched.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop items mentioning any of these words/phrases (same matching rules).",
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Include keywords: match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "Whether an item needs one or all of the include keywords.",
            "default": "any"
          },
          "matchIn": {
            "title": "Search keywords in",
            "enum": [
              "title",
              "titleSummary",
              "all"
            ],
            "type": "string",
            "description": "Which item text the keyword filters look at. Full article text (fetchFullContent) is fetched after filtering and is not searched.",
            "default": "titleSummary"
          },
          "query": {
            "title": "Keyword filter (legacy)",
            "type": "string",
            "description": "Space-separated words that must ALL appear in title/summary. Ignored when includeKeywords is set."
          },
          "since": {
            "title": "Published since",
            "type": "string",
            "description": "ISO date/datetime (2026-09-01, 2026-09-01T12:00:00Z) or relative span back from now: 30m, 24h, 7d, 2w. Items without a parseable date are dropped when set."
          },
          "until": {
            "title": "Published until",
            "type": "string",
            "description": "ISO date/datetime or relative span. A date-only value includes that whole day (UTC)."
          },
          "sinceHours": {
            "title": "Since N hours (legacy)",
            "minimum": 0,
            "type": "integer",
            "description": "Only items from the last N hours (0 = no limit). If both are set, the later of since / sinceHours wins.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only items not seen in previous runs",
            "type": "boolean",
            "description": "Monitoring mode: remembers item ids in the named key-value store \"rss-to-json-state\" and outputs only new items on each scheduled run (last 20 000 ids kept).",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the seen-items memory for onlyNew. Default is derived from the URL list; set it explicitly to keep state when you edit the list. Letters, digits, dot, dash, underscore."
          },
          "limitPerFeed": {
            "title": "Max items per feed",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap per feed, applied after filters and sorting (so with publishedDesc you get each feed's newest N matches).",
            "default": 50
          },
          "maxItems": {
            "title": "Max items total",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Overall cap after merging feeds (keeps the first N in the chosen sort order).",
            "default": 1000
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "publishedDesc",
              "publishedAsc",
              "feedOrder"
            ],
            "type": "string",
            "description": "Order of the merged output. Undated items go last.",
            "default": "publishedDesc"
          },
          "dedupeBy": {
            "title": "Deduplicate by",
            "enum": [
              "url",
              "id",
              "title",
              "none"
            ],
            "type": "string",
            "description": "Removes the same story appearing in several feeds or twice in one feed.",
            "default": "url"
          },
          "fetchFullContent": {
            "title": "Fetch full article text",
            "type": "boolean",
            "description": "Open each output item's link and extract the main article text (plus word count, reading time, canonical URL, og:image/author/date when missing). One extra request per item; paywalled or bot-protected sites return fullContentError.",
            "default": false
          },
          "maxFullContentChars": {
            "title": "Max article characters",
            "minimum": 500,
            "maximum": 200000,
            "type": "integer",
            "description": "Truncate fullContent to this length.",
            "default": 20000
          },
          "fullContentConcurrency": {
            "title": "Article fetch concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel article requests. Keep low for single-site feeds to stay polite.",
            "default": 3
          },
          "summaryMaxChars": {
            "title": "Max summary characters",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Plain-text summary length (0 = no limit).",
            "default": 1000
          },
          "contentMaxChars": {
            "title": "Max feed content characters",
            "minimum": 0,
            "maximum": 200000,
            "type": "integer",
            "description": "Plain-text length of the content embedded in the feed (content:encoded / Atom content). 0 = no limit.",
            "default": 5000
          },
          "includeContentHtml": {
            "title": "Include raw content HTML",
            "type": "boolean",
            "description": "Add contentHtml with the feed's original HTML (not truncated).",
            "default": false
          },
          "includeErrors": {
            "title": "Output a row per failed feed",
            "type": "boolean",
            "description": "Off (default): feeds that could not be fetched/parsed are listed free of charge in the SUMMARY record (errors, feeds) and the run's status message. On: also push a {feedUrl, httpStatus, error} row per failed feed — such rows are dataset rows and are charged like items.",
            "default": false
          },
          "fields": {
            "title": "Output fields",
            "type": "array",
            "description": "Keep only these fields, e.g. [\"publishedAt\",\"feedTitle\",\"title\",\"url\"]. Empty = all.",
            "items": {
              "type": "string"
            }
          },
          "userAgent": {
            "title": "User-Agent",
            "type": "string",
            "description": "Override the User-Agent header (some feeds serve 403 to unknown bots)."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}