{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News API Scraper – RSS, Real URLs, News Monitoring",
    "description": "Search Google News RSS by keyword, topic or publisher and get structured articles: headline (raw and with the \" - Publisher\" suffix stripped), publisher name and domain, date, feed rank, resolved publisher URL, related coverage of the same story, and optional full article text. Pay per article.",
    "version": "0.1",
    "x-build-id": "UQRcSJ3n5hN1jFao5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetchsmith~google-news-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetchsmith-google-news-scraper",
        "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/fetchsmith~google-news-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetchsmith-google-news-scraper",
        "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/fetchsmith~google-news-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetchsmith-google-news-scraper",
        "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": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "One or more search terms. Supports Google News operators like \"exact phrase\", site:bbc.com, when:7d, before:2026-01-01.",
            "items": {
              "type": "string"
            }
          },
          "rssUrls": {
            "title": "Custom Google News RSS URLs",
            "type": "array",
            "description": "Optional: topic/section/publication feeds from news.google.com/rss/... (added to the queries).",
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "title": "Browse by topic",
            "type": "array",
            "description": "Optional: Google News' built-in topic sections (added to the queries), no RSS URL needed. Main sections: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SCIENCE, SPORTS, HEALTH. Narrower sub-sections Google serves but does not link in its own nav: POLITICS, ECONOMY, REAL_ESTATE, JOBS, EDUCATION, AUTOS, MOVIES, MUSIC, CELEBRITIES, ARTS, SOCCER, BASKETBALL.",
            "items": {
              "type": "string"
            }
          },
          "excludeWords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Words or phrases to exclude, applied to every query (e.g. \"iphone\" drops articles mentioning it). Equivalent to typing -word yourself, just easier to manage as a list. Does not apply to topics or custom RSS URLs, which are fixed feeds, not search terms.",
            "items": {
              "type": "string"
            }
          },
          "siteFilter": {
            "title": "Only these domains",
            "type": "array",
            "description": "Restrict results to these publisher domains, e.g. nytimes.com, reuters.com. Multiple domains are OR'd (site:a.com OR site:b.com), applied to every query at Google's end (no extra requests, no under-filled results). Same effect as typing site: yourself, just easier to manage as a list across many queries. Does not apply to topics or custom RSS URLs, which are fixed feeds.",
            "items": {
              "type": "string"
            }
          },
          "excludeSites": {
            "title": "Exclude these domains",
            "type": "array",
            "description": "Drop results from these publisher domains, e.g. pinterest.com. Equivalent to typing -site:domain.com yourself. Does not apply to topics or custom RSS URLs, which are fixed feeds.",
            "items": {
              "type": "string"
            }
          },
          "timePeriod": {
            "title": "Time period",
            "enum": [
              "",
              "1h",
              "6h",
              "12h",
              "1d",
              "7d",
              "30d",
              "90d",
              "1y"
            ],
            "type": "string",
            "description": "Only return articles published within this window, filtered by Google itself (no extra requests). Applies to search queries only, not to topics or custom RSS URLs. Leave empty for no time limit. Ignored if you set an explicit From/To date below.",
            "default": ""
          },
          "publishedAfter": {
            "title": "Published after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return articles published on or after this date, e.g. 2026-09-01. Applies to search queries only. Overrides Time period."
          },
          "publishedBefore": {
            "title": "Published before (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return articles published before this date, e.g. 2026-09-10. Applies to search queries only. Overrides Time period. Google evaluates the day boundary in its own timezone, not UTC, so the edges are loose by a few hours. Note: pairing an explicit date window with 'Exclude these domains' trips a Google bug that leaks articles far outside the window — this Actor drops anything more than a day outside it, unbilled, and says so in the run status. Same protection applies if you type after:/before: directly into a query instead of using this field."
          },
          "language": {
            "title": "Language (hl)",
            "type": "string",
            "description": "e.g. en-US, en-GB, de, fr, es, pt-BR, ar, ja",
            "default": "en-US"
          },
          "country": {
            "title": "Country (gl)",
            "type": "string",
            "description": "Two-letter country code, e.g. US, GB, DE, IN, EG",
            "default": "US"
          },
          "maxItemsPerQuery": {
            "title": "Max articles per query",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Google returns up to 100 per feed. Default is 25 — decoding the real publisher URL for each article is a sequential 2-request round trip, and Google's per-IP rate limit on that endpoint has gotten slower since this default was last tuned, so 50+ articles can now take 4-5 minutes; raise it if you don't need every article back quickly.",
            "default": 25
          },
          "decodeUrls": {
            "title": "Resolve real article URLs",
            "type": "boolean",
            "description": "Google News links are encoded redirects. When on, each link is decoded to the publisher's URL (one extra request per article).",
            "default": true
          },
          "fetchArticleBody": {
            "title": "Extract full article text",
            "type": "boolean",
            "description": "Open each publisher page and extract the full article body, author, image, keywords and section (JSON-LD first, HTML paragraphs as fallback). Adds one request per article and is slower; paywalled/blocked articles are still returned with articleFetchStatus explaining why the text is missing.",
            "default": false
          },
          "articleBodyMaxChars": {
            "title": "Max article body length",
            "minimum": 500,
            "maximum": 200000,
            "type": "integer",
            "description": "Truncate articleBody to this many characters (articleBodyTruncated tells you when it happened). Only used when 'Extract full article text' is on.",
            "default": 20000
          },
          "extractTickers": {
            "title": "Extract stock tickers",
            "type": "boolean",
            "description": "Pull stock tickers into a tickers array from the title (and article body, if 'Extract full article text' is on). Rule-based, no extra request, costs nothing extra. Deliberately narrow: catches $CASHTAG, EXCHANGE:TICKER, and \"Company Name (TICKER)\" notation, never a bare capitalized word — that keeps common false positives (WSJ, IPO, EV, UN, SEC...) out, at the cost of missing plain-text mentions like \"TSLA stock\".",
            "default": false
          },
          "maxResults": {
            "title": "Max results (total)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Overall cap across all queries.",
            "default": 500
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Route all Google/publisher requests through Apify Proxy. Recommended: Google rate-limits the URL-decoding endpoint per source IP once you decode a lot in a short window, and rotating proxy IPs is the actual fix for it. Leave as-is to use automatic Apify Proxy; runs on accounts without proxy access fall back to a direct connection.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}