{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News Scraper API: Articles, Real URLs, Full Text",
    "description": "Google News articles by keyword, site or topic in 60+ countries: title, source, date, real publisher URL, full text, Markdown for LLMs. Dedup and only-new mode. Google News API alternative. No API key, no login. MCP-ready for AI agents. Pay per result, errors are free. $4 per 1,000 articles.",
    "version": "0.1",
    "x-build-id": "V3mKVgReGYfx2Knjk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/actose~google-news-rss/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-actose-google-news-rss",
        "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/actose~google-news-rss/runs": {
      "post": {
        "operationId": "runs-sync-actose-google-news-rss",
        "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/actose~google-news-rss/run-sync": {
      "post": {
        "operationId": "run-sync-actose-google-news-rss",
        "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": {
          "keywords": {
            "title": "Keywords / search queries",
            "type": "array",
            "description": "One Google News search per line. Google search operators work: \"exact phrase\", OR, -exclude, intitle:, site:, when:7d. Example: tesla site:reuters.com",
            "items": {
              "type": "string"
            }
          },
          "sites": {
            "title": "News sites (domains)",
            "type": "array",
            "description": "Get the latest Google News articles from these publishers (runs a site:domain search). Example: lemonde.fr, bbc.co.uk",
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "title": "Topics / sections",
            "type": "array",
            "description": "Google News sections. TOP = the front page (top stories) of each country. If you give no keyword, site or topic, TOP is used.",
            "items": {
              "type": "string",
              "enum": [
                "TOP",
                "WORLD",
                "NATION",
                "BUSINESS",
                "TECHNOLOGY",
                "ENTERTAINMENT",
                "SPORTS",
                "SCIENCE",
                "HEALTH"
              ],
              "enumTitles": [
                "Top stories",
                "World",
                "Nation (country news)",
                "Business",
                "Technology",
                "Entertainment",
                "Sports",
                "Science",
                "Health"
              ]
            }
          },
          "topicIds": {
            "title": "Google News topic IDs (advanced)",
            "type": "array",
            "description": "Any Google News topic or entity page: copy the ID after /topics/ in a news.google.com URL (starts with CAAq...).",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries (Google News editions)",
            "type": "array",
            "description": "Two-letter country codes, e.g. US, GB, FR, DE, IN, BR, JP. The language of each country's edition is chosen automatically. To force a language use COUNTRY:language, e.g. CA:fr, US:es, BE:nl, CH:fr.",
            "default": [
              "US"
            ],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language override (optional)",
            "type": "string",
            "description": "Force one language for all countries without an explicit COUNTRY:language, e.g. en. Leave empty to use each country's own language."
          },
          "timeRange": {
            "title": "Time range",
            "enum": [
              "any",
              "1h",
              "12h",
              "1d",
              "7d",
              "30d",
              "1y"
            ],
            "type": "string",
            "description": "Only keep articles published within this period (keyword and site searches only). Ignored when a date range is set.",
            "default": "any"
          },
          "dateFrom": {
            "title": "From date",
            "type": "string",
            "description": "Only articles published on or after this date (YYYY-MM-DD). Keyword and site searches only."
          },
          "dateTo": {
            "title": "To date",
            "type": "string",
            "description": "Only articles published before this date (YYYY-MM-DD, exclusive)."
          },
          "splitByDay": {
            "title": "Split the date range day by day (get more than 100 results)",
            "type": "boolean",
            "description": "Google News returns at most 100 articles per feed. With a From date, this runs one search per day so you can collect thousands of articles for a period (max 400 days).",
            "default": false
          },
          "maxArticlesPerQuery": {
            "title": "Max articles per query and country",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Limit per keyword/site/topic and per country. One feed gives up to 100 articles (more with Split by day).",
            "default": 100
          },
          "maxArticles": {
            "title": "Max articles in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on the number of billed articles for the whole run.",
            "default": 1000
          },
          "resolveUrls": {
            "title": "Resolve the real article URL",
            "type": "boolean",
            "description": "Turn news.google.com redirect links into the publisher URL. Articles that cannot be resolved are still returned but are not billed. Disable for maximum speed (url will then be empty for most articles).",
            "default": true
          },
          "deduplicate": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Merge the same article found by several queries or countries (by Google ID, title + source, and final URL without tracking parameters). Duplicates are never billed.",
            "default": true
          },
          "extractText": {
            "title": "Extract full article text (extra event)",
            "type": "boolean",
            "description": "Download each publisher page and extract the main text, author, image and description. Billed as an extra 'article-text' event only when text is actually extracted (paywalls and video pages are not billed).",
            "default": false
          },
          "onlyNew": {
            "title": "Only new articles (for scheduled runs)",
            "type": "boolean",
            "description": "Skip articles already delivered by previous runs with the same search (same keywords, sites, topics and countries). The history is kept in your named key-value store 'google-news-rss-state'. Skipped articles are not charged. Perfect for hourly or daily monitoring.",
            "default": false
          },
          "stateKey": {
            "title": "Memory name for 'Only new' (optional)",
            "type": "string",
            "description": "Give the 'Only new' history a fixed name (e.g. brand-monitoring) so you can change the search and keep the history, or share it between tasks. Leave empty: one history per search configuration."
          },
          "ragChunkSize": {
            "title": "Split article text into chunks for RAG (characters)",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "With 'Extract full article text', also return textChunks: the text cut on paragraph boundaries into chunks of about this many characters, ready for embeddings. 0 = off. Every item always has a 'markdown' field (title, source, date, URL and text) ready for LLMs.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many articles are processed in parallel. Higher is faster but more likely to be rate-limited by Google.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Datacenter proxy (default) is enough for Google News RSS.",
            "default": {
              "useApifyProxy": true
            }
          },
          "residentialFallback": {
            "title": "Residential proxy fallback",
            "type": "boolean",
            "description": "If Google rate-limits the datacenter IPs while resolving links, retry the blocked request once through a residential IP. Only tiny Google pages go through it.",
            "default": true
          },
          "maxResidentialMb": {
            "title": "Residential traffic cap (MB)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop using the residential fallback after this much traffic in one run.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}