{
  "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": "JOJ4yVgvS1hPOwmRA"
  },
  "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"
            }
          },
          "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"
          },
          "decodeUrls": {
            "title": "Resolve the publisher's real URL",
            "type": "boolean",
            "description": "Resolve every article's real publisher URL (`https://www.nytimes.com/2026/09/10/…`) out of the `news.google.com/rss/articles/CBMi…` redirect, keeping the redirect in `googleUrl`. Leave it on — it is why this Actor exists; turn it off only when headlines are enough. It costs **two extra requests per article**, so a 50-article feed goes from 1 request to 101. Articles that fail to resolve keep the Google link, are flagged `urlDecoded: false`, and are never dropped.",
            "default": true
          },
          "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
          },
          "topics": {
            "title": "Topics and sections",
            "type": "array",
            "description": "Google News' own sections, one entry each: **TOP**, **WORLD**, **NATION**, **BUSINESS**, **TECHNOLOGY**, **ENTERTAINMENT**, **SPORTS**, **SCIENCE**, **HEALTH** — case does not matter. Leave it empty and only the searches run; name one or two sections for a curated front page instead. A raw `CAAqKggK…` topic id, or a whole `news.google.com/topics/…` link, works too and is how you follow a narrower section. Sections return fewer articles than a search does.",
            "items": {
              "type": "string"
            }
          },
          "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}