{
  "openapi": "3.0.1",
  "info": {
    "title": "Google News Scraper — News by Query, Exact Limit, No Start Fee",
    "description": "Type a search query and get Google News as rows — the headline, the Google News link, Google's own article id, the publication time as a real ISO timestamp, the publisher and their site, and how many outlets carried the story. From $0.80/1,000 articles, exact limit, no start fee.",
    "version": "1.0",
    "x-build-id": "mQKuafgup32dSJPQH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~google-news-rss-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-google-news-rss-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/steadyfetch~google-news-rss-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-google-news-rss-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/steadyfetch~google-news-rss-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-google-news-rss-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Search terms, one per line — \"electric vehicles\", \"openai\", or Google News search syntax like site:reuters.com ukraine. Each term is fetched once and returns up to about 100 article rows, newest first, under the language, country and time window set below. A term that matches nothing ships one uncharged row and is never retried, and no term is ever widened or rewritten to find something — you get what you typed or you get told. Leave this empty and the run returns a live sample instead of collecting anything, at no result fee.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "title": "Topic sections",
            "type": "array",
            "description": "Google News' own section front pages, one per line: WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE or HEALTH. Not case sensitive. Each section is a whole editorial page rather than a search, so it is the door to use for \"what is the news in technology right now\". A subject that is not one of those eight is a search term — put it in \"Search queries\" instead, and a value this actor does not know ships one uncharged row naming the eight that work rather than being swapped for one of them.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max rows to return",
            "type": "integer",
            "description": "Hard ceiling for the WHOLE run, counting every article row across every query and every topic section. Exact, never overshot, and never padded: the ask is split evenly across your inputs, and a feed carrying fewer articles than its share gives you what it carries and says so on its own row. Accepted range 1 to 50,000; a number outside it is moved to the nearest value in range and one uncharged note row says so, rather than the run being refused.",
            "default": 100
          },
          "timeWindow": {
            "title": "Time window",
            "type": "string",
            "description": "How far back to look: 1h, 6h, 12h, 1d, 3d, 7d, 14d or 30d. Leave it empty for no window at all, which is Google's own default ordering. Set it to the gap between your scheduled runs and leave \"Skip articles you already have\" on, and a schedule pays for what is new and nothing else. Google indexes a publisher on its own schedule, so a short window is a real filter on publication time and not a promise about how fast the index moves."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "The edition language, as a two-letter ISO 639-1 code — en, es, fr, de, pt, ar, hi, ja, it, nl and the rest. It decides which Google News edition answers, so it changes which publishers you get, not just the interface. A code this actor cannot read is refused on an uncharged row naming what works; it is never quietly swapped for English, because that would bill you for articles in a language you did not ask for.",
            "default": "en"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "The edition country, as a two-letter ISO 3166-1 code — US, GB, CA, AU, IN, DE, FR, SA, BR, JP and the rest. Pair it with the matching language for a national edition (for example de + DE). A code this actor cannot read is refused on an uncharged row naming what works, and is never swapped for another country.",
            "default": "US"
          },
          "skipSeenArticles": {
            "title": "Skip articles you already have",
            "type": "boolean",
            "description": "ON (default): an article already delivered to your account is skipped — no row, no charge — and the run says how many. OFF: those articles are delivered again anyway, marked repeat: true, and still not charged. Anything older than 90 days in your account's memory counts as new again either way. The flat Query check is charged either way when the feed came back carrying articles, because \"nothing new since your last run\" is the answer a schedule is paying for.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}