{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News Scraper — News Search API & Headlines",
    "description": "Turn Google News into structured rows. Search any keyword, topic or publication and get headline, publisher, publish time, snippet and link. Optional full article text with word count and top image. Filter by date range, site or excluded terms. Export to CSV, JSON or Excel.",
    "version": "0.1",
    "x-build-id": "6DOufVEmeyvDmSZgc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glasswing~google-news-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glasswing-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/glasswing~google-news-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glasswing-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/glasswing~google-news-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glasswing-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": {
          "startUrls": {
            "title": "Google News URLs or RSS feeds",
            "uniqueItems": true,
            "type": "array",
            "description": "One URL per line. Accepts Google News search URLs (news.google.com/search?q=...), topic URLs (news.google.com/topics/...), publication URLs (news.google.com/publications/...) and the matching RSS feed URLs (news.google.com/rss/...). Non-RSS Google News URLs are read as their RSS equivalent. Leave empty to use Search query or Topic instead.",
            "default": [
              "https://news.google.com/rss/search?q=artificial%20intelligence&hl=en-US&gl=US&ceid=US:en"
            ],
            "items": {
              "type": "string"
            }
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword or phrase to search Google News for, e.g. `electric vehicles` or `\"open source\" AI`. Google News search operators work here too, for example `when:7d`, `site:reuters.com` or `intitle:apify`. Used only when Start URLs is empty."
          },
          "queries": {
            "title": "Search terms (bulk)",
            "type": "array",
            "description": "Many keywords or phrases in one run, one Google News search each. No limit on the number of terms; duplicates are removed. Operators such as `when:7d` or `site:reuters.com` work in every term. A term with no results gives one free `not_found` row. Combined with Search query; used only when Start URLs is empty. Raise Maximum results for large lists: it is the total across all terms.",
            "items": {
              "type": "string"
            }
          },
          "topic": {
            "title": "Topic section",
            "enum": [
              "WORLD",
              "NATION",
              "BUSINESS",
              "TECHNOLOGY",
              "ENTERTAINMENT",
              "SPORTS",
              "SCIENCE",
              "HEALTH"
            ],
            "type": "string",
            "description": "Scrape one of Google News' topic headline feeds instead of a search. Used only when both Start URLs and Search query are empty."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code for the Google News edition (the `hl` and `ceid` parameters), e.g. `en`, `de`, `es`, `fr`. Applies to Search query and Topic; a Start URL keeps whatever edition it already contains.",
            "default": "en"
          },
          "country": {
            "title": "Country edition",
            "type": "string",
            "description": "Two-letter country code for the Google News edition (the `gl` and `ceid` parameters), e.g. `US`, `GB`, `DE`, `IN`. Applies to Search query and Topic; a Start URL keeps whatever edition it already contains.",
            "default": "US"
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many records have been saved to the dataset, e.g. `50`. Each saved record with status `ok` is one billable result. One Google News feed returns roughly 40-100 articles, so raise this only when you pass several feeds.",
            "default": 20
          },
          "dateFrom": {
            "title": "Published from",
            "type": "string",
            "description": "Keep only articles published on or after this date. An absolute date (`2026-10-01`) or a relative one (`7 days`, `24 hours`, `2 weeks`)."
          },
          "dateTo": {
            "title": "Published until",
            "type": "string",
            "description": "Keep only articles published on or before this date (the whole day counts). An absolute date (`2026-10-15`) or a relative one (`1 day`)."
          },
          "excludeTerms": {
            "title": "Exclude terms",
            "type": "array",
            "description": "Drop articles whose headline or snippet contains any of these words or phrases (case-insensitive, whole words), e.g. `opinion`, `stock price`.",
            "items": {
              "type": "string"
            }
          },
          "sites": {
            "title": "Only these publishers",
            "type": "array",
            "description": "Keep only articles from these publisher domains, e.g. `reuters.com`, `apnews.com`. Sub-domains count too (`reuters.com` also keeps `widerimage.reuters.com`).",
            "items": {
              "type": "string"
            }
          },
          "excludeSites": {
            "title": "Exclude publishers",
            "type": "array",
            "description": "Drop articles from these publisher domains, e.g. `youtube.com`, `facebook.com`.",
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new articles (watch mode)",
            "type": "boolean",
            "description": "Return only articles that an earlier run with this option on has not returned yet, so a scheduled run (hourly, daily or weekly) gives you just the new coverage. Already-seen articles are skipped and never charged; a feed with nothing new gives one free `not_found` row and the run finishes successfully. Seen article ids (the feed `guid`) are kept in a named key-value store on your own Apify account (next field). The first run returns everything, like a normal run.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Watch list name",
            "type": "string",
            "description": "Name of the key-value store on your account that remembers which articles were already returned. Use a different name per schedule to keep separate watch lists (e.g. `news-brand-a`). Lowercase letters, digits and hyphens. Used only with Only new articles.",
            "default": "google-news-monitor"
          },
          "includeArticleText": {
            "title": "Include article text (paid add-on)",
            "type": "boolean",
            "description": "Open every article on the publisher's site and add its main text (`articleText`), `wordCount`, lead image (`topImage`), `canonicalUrl` and the real `publisherUrl`. Billed as the extra `article` event only when the text was extracted (`articleStatus: ok`); paywalled, blocked or text-less pages are free and say why in `articleError`. Slower: about 1-2 seconds per article.",
            "default": false
          },
          "resolvePublisherUrl": {
            "title": "Resolve publisher URL",
            "type": "boolean",
            "description": "Add a `publisherUrl` column with the article's URL on the publisher's own site, decoded from the Google News link. Decoding happens locally and costs no extra request, but it only succeeds for Google's older link format; for links Google encrypts server-side the column stays empty and `link` keeps the Google News URL. To get the real publisher URL for encrypted links, turn on 'Include article text': it follows each link to the publisher and fills `publisherUrl` and `articleUrl`.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The Actor is HTTP-only and Google News RSS answers datacenter IPs directly, so no proxy is needed. Enable Apify Proxy (datacenter group) only if you see `error` rows; residential proxies are not needed for this Actor.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}