{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News Search, Topics & Real Article URLs",
    "description": "Scrape Google News as data. One row per article: headline, publisher, publish time, description — and the publisher's real URL, decoded from the Google redirect that other tools leave you with. Full search syntax, topic sections, 140+ regional editions. No API key.",
    "version": "0.1",
    "x-build-id": "DNm6ld3LE86ISmcot"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/insight.solutions~google-news-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-insight.solutions-google-news-api",
        "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/insight.solutions~google-news-api/runs": {
      "post": {
        "operationId": "runs-sync-insight.solutions-google-news-api",
        "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/insight.solutions~google-news-api/run-sync": {
      "post": {
        "operationId": "run-sync-insight.solutions-google-news-api",
        "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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "One entry per Google News search. **Google News search syntax works in full**, because these go to Google News' own search: `site:reuters.com` restricts to one publisher, `when:1d` / `when:7d` / `when:1y` bound the age, `\"quoted phrases\"` match exactly, `OR` unions terms, a leading `-` excludes one, and `intitle:` matches the headline. Combine them freely — `site:reuters.com when:1d`, `(\"interest rates\" OR inflation) -crypto`. Each query is one request and returns roughly 100 articles.",
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "title": "Topics and sections",
            "type": "array",
            "description": "Google News' own sections, one entry each: **TOP** (the front page), **WORLD**, **NATION**, **BUSINESS**, **TECHNOLOGY**, **ENTERTAINMENT**, **SPORTS**, **SCIENCE**, **HEALTH**. Case does not matter. You can also paste a **raw topic id** — the long `CAAqKggK…` string out of a `news.google.com/topics/…` link — or the whole link, which is how you follow a narrower section such as a single sports league or a country's local news. A topic section returns 38–67 articles in the captures, fewer than a search does, because Google curates it.",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code for the Google News edition — `en`, `de`, `fr`, `es`, `pt`, `ja`. Together with **Country** this picks one of Google News' regional editions, and the edition decides which publishers appear at all: `en`/`US` and `de`/`DE` return almost disjoint sets of sources for the same story. A regional tag such as `pt-BR` is passed through as written.",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Two-letter ISO country code for the edition — `US`, `GB`, `DE`, `IN`, `AU`, `BR`. Pair it with a language that is actually published there: `en`/`IN` and `de`/`DE` are real editions, `de`/`US` is not, and Google answers an edition that does not exist with a different one rather than an error.",
            "default": "US"
          },
          "maxItemsPerQuery": {
            "title": "Articles per query or topic",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many articles to keep from each feed, in the order Google ranked them. **Google decides how many it serves and there is no paging** — the captured feeds hold 38 to 112 items — so this caps rows, never requests. Lowering it is how you cut the cost of a run with `decodeUrls` on, because an article that is not kept is not decoded.",
            "default": 100
          },
          "decodeUrls": {
            "title": "Resolve the publisher's real URL",
            "type": "boolean",
            "description": "**This is the expensive part, and it is why this Actor exists.** A Google News feed does not carry article URLs — it carries `news.google.com/rss/articles/CBMi…` redirects that only resolve inside a browser. With this on, every article's real address (`https://www.nytimes.com/2026/09/10/science/…`) is resolved and put in `url`, with the redirect kept in `googleUrl`. It costs **two extra requests per article**, so a 50-article feed goes from 1 request to 101 and from seconds to a minute or two. Turn it off and you get the same rows in one request with `url` = the Google link. Articles that fail to resolve keep the Google link and are flagged `urlDecoded: false`; they are never dropped.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Requests in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many queries, topics and URL decodes run at once. Each parallel worker keeps its own proxy session, so one blocked request burns only its own exit IP. Raising this is the main lever on how long a decoded run takes; raising it far is how you get blocked.",
            "default": 4
          },
          "maxRunSecs": {
            "title": "Maximum run time (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Wall-clock budget for the whole run. When it is reached the Actor stops fetching, keeps and bills for every row it already wrote, and files a free diagnostic row for each query or topic it never reached. With `decodeUrls` on, budget roughly one second per article; with it off, a couple of seconds per query.",
            "default": 240
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Google News answered Apify's **datacenter** proxy on every capture, so that is the default and it is far cheaper than residential — the proxy cost is already inside the per-article price. Residential worked too and was five to eight times slower on the same feeds. Switch only if you start seeing `blocked` rows. Sessions rotate automatically when an exit IP is refused.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}