{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News API: Search, Topics and Original Article URLs",
    "description": "Get Google News articles for any search, topic, city or country edition as clean JSON: headline, publisher, publish time, Google News link and the original article URL. Date ranges, split by day past the 100 result cap, dedupe. No browser or proxy. $1.50 per 1,000 articles.",
    "version": "1.0",
    "x-build-id": "fDJJm8tHYOKeXK7IU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/joesimo~google-news/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-joesimo-google-news",
        "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/joesimo~google-news/runs": {
      "post": {
        "operationId": "runs-sync-joesimo-google-news",
        "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/joesimo~google-news/run-sync": {
      "post": {
        "operationId": "run-sync-joesimo-google-news",
        "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 search per line. Google News search operators work: <code>\"exact phrase\"</code>, <code>OR</code>, <code>-exclude</code>, <code>site:reuters.com</code>, <code>intitle:</code>, <code>when:24h</code>. Each search returns up to 100 articles per edition (a Google limit). For more, set a date range and turn on <b>Split date range by day</b>.",
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "title": "Topics",
            "type": "array",
            "description": "Topic headline feeds. Use <code>WORLD</code>, <code>NATION</code>, <code>BUSINESS</code>, <code>TECHNOLOGY</code>, <code>ENTERTAINMENT</code>, <code>SPORTS</code>, <code>SCIENCE</code>, <code>HEALTH</code>, a topic ID starting with <code>CAAq</code>, or a <code>news.google.com/topics/...</code> URL.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Local news locations",
            "type": "array",
            "description": "Local headline feeds for a city, region or country name, for example <code>Boston</code>, <code>Texas</code> or <code>London</code>.",
            "items": {
              "type": "string"
            }
          },
          "topStories": {
            "title": "Top stories",
            "type": "boolean",
            "description": "Also fetch the Top stories feed for every edition.",
            "default": false
          },
          "feedUrls": {
            "title": "Google News feed or page URLs",
            "type": "array",
            "description": "Any Google News search, topic, location or story URL, either the RSS form (<code>news.google.com/rss/...</code>) or the web page form (<code>news.google.com/topics/...</code>). Each URL keeps its own edition (hl, gl, ceid).",
            "items": {
              "type": "string"
            }
          },
          "editions": {
            "title": "Editions (country:language)",
            "type": "array",
            "description": "Google News editions to query, as <code>COUNTRY:language</code>. Examples: <code>US:en</code>, <code>GB:en</code>, <code>IN:en</code>, <code>CA:fr</code>, <code>DE:de</code>, <code>FR:fr</code>, <code>ES:es</code>, <code>MX:es-419</code>, <code>BR:pt-419</code>, <code>JP:ja</code>, <code>TW:zh-Hant</code>. Every query, topic and location runs once per edition. Unknown editions fall back to US:en and are flagged in the run summary.",
            "default": [
              "US:en"
            ],
            "items": {
              "type": "string"
            }
          },
          "dateFrom": {
            "title": "Published after",
            "type": "string",
            "description": "Keep only articles published on or after this date (UTC). Use <code>YYYY-MM-DD</code>, an ISO date-time, or a relative span such as <code>24 hours</code>, <code>7 days</code> or <code>2 weeks</code>. For searches the range is also sent to Google, so you get articles from that period, not just the newest 100."
          },
          "dateTo": {
            "title": "Published before",
            "type": "string",
            "description": "Keep only articles published on or before this date (UTC, the whole day is included). Same formats as above. Leave empty for now."
          },
          "splitByDay": {
            "title": "Split date range by day",
            "type": "boolean",
            "description": "For searches with a date range, run one search per day (up to 92 days) to get past the 100 results per search limit. A 30 day range can return up to about 3,000 articles per query.",
            "default": false
          },
          "maxItems": {
            "title": "Max articles",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of articles to save in total. You pay per saved article. Use 0 for no limit.",
            "default": 100
          },
          "maxItemsPerFeed": {
            "title": "Max articles per feed",
            "minimum": 0,
            "type": "integer",
            "description": "Cap for each single feed (each query, topic or location per edition, or each day when splitting). 0 means everything the feed returns (Google returns up to 100).",
            "default": 0
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "relevance",
              "newest"
            ],
            "type": "string",
            "description": "<b>Relevance</b> keeps Google's order and interleaves feeds so each query gets a fair share of Max articles. <b>Newest first</b> sorts everything by publish date.",
            "default": "relevance"
          },
          "dedupe": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Drop articles already seen in another feed or edition (same Google article ID, or same title from the same publisher).",
            "default": true
          },
          "excludeSources": {
            "title": "Exclude publishers",
            "type": "array",
            "description": "Drop articles whose publisher name or homepage contains any of these strings, for example <code>Yahoo</code> or <code>msn.com</code>. Case-insensitive.",
            "items": {
              "type": "string"
            }
          },
          "resolveUrls": {
            "title": "Resolve original article URLs",
            "type": "boolean",
            "description": "Google News links redirect through news.google.com. With this on, each saved article also gets <code>articleUrl</code>, the publisher's own URL (2 light requests per 10 articles plus one per article). If Google starts rate limiting, resolution pauses and the remaining articles keep only their Google News link; the run still succeeds. Turn off for the fastest runs.",
            "default": true
          },
          "resolveConcurrency": {
            "title": "Max parallel URL resolutions",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many article links are resolved at the same time. Lower it if the run summary shows URL resolution paused.",
            "default": 4
          },
          "maxConcurrency": {
            "title": "Max parallel feed requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many RSS feeds are fetched at the same time.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for each HTTP request.",
            "default": 30
          },
          "maxRetries": {
            "title": "Max retries per feed",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries with exponential backoff for network errors, HTTP 429 and 5xx responses.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed for normal use: Google News RSS works without a proxy. Only set one if your runs report many failed feeds or paused URL resolution."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}