{
  "openapi": "3.0.1",
  "info": {
    "title": "Bing Search Scraper: News, Publishers & Real Links",
    "description": "Search Bing News by keyword across 60 country/language markets and get one clean row per story: headline, publisher, snippet, publish date, thumbnail and the publisher's own URL instead of a click-tracking redirect. Optional Bing web results for the same keywords, top 10 only.",
    "version": "0.0",
    "x-build-id": "AC0TV6bgExhKgnrMc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/arman-bd~bing-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-arman-bd-bing-search-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/arman-bd~bing-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-arman-bd-bing-search-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/arman-bd~bing-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-arman-bd-bing-search-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": "Keywords",
            "type": "array",
            "description": "Keywords to search, one per line. Each is searched independently, so two keywords cost roughly twice one. Plain terms only: a \"quoted phrase\" works, but site:, intitle:, inurl:, -exclude and OR are not supported by this source - it answers them with unrelated results rather than an error, so a query containing one is named and skipped before the run instead of quietly returning nonsense. Prefer a specific subject over a broad topic phrase: \"news\", \"business news\", \"world news\", \"sports news\" and the like are answered with a topic landing page rather than results, so they return zero rows (named in the run summary, and charged nothing).",
            "items": {
              "type": "string"
            }
          },
          "surfaces": {
            "title": "Surfaces to search",
            "type": "array",
            "description": "Which half of the source to read. News is the default because it is the surface that answers reliably: it covers 60 markets, pages to roughly 100 results per keyword, and returns nothing at all for a keyword with no coverage. Web is a bonus column - it is en-US only, capped at 10 results per keyword with no page 2, and answers only about four keywords in ten. For the rest it collapses your keyword to its first word and answers that instead, so a web row is saved only if it mentions at least two distinct terms from your keyword; rows below that bar are dropped before they reach the dataset and are never charged. Read the ceiling note on \"Max results per keyword\" before switching it on.",
            "items": {
              "type": "string",
              "enum": [
                "news",
                "web"
              ],
              "enumTitles": [
                "News: headlines, publishers, dates and thumbnails",
                "Web: top 10 organic results, en-US only"
              ]
            },
            "default": [
              "news"
            ]
          },
          "market": {
            "title": "Market (country and language)",
            "enum": [
              "en-US",
              "ar-AE",
              "ar-SA",
              "bg-BG",
              "cs-CZ",
              "da-DK",
              "de-AT",
              "de-CH",
              "de-DE",
              "el-GR",
              "en-AU",
              "en-CA",
              "en-GB",
              "en-ID",
              "en-IE",
              "en-IN",
              "en-MY",
              "en-NZ",
              "en-PH",
              "en-SG",
              "en-ZA",
              "es-AR",
              "es-CL",
              "es-ES",
              "es-MX",
              "es-US",
              "et-EE",
              "fi-FI",
              "fr-BE",
              "fr-CA",
              "fr-CH",
              "fr-FR",
              "he-IL",
              "hi-IN",
              "hr-HR",
              "hu-HU",
              "it-IT",
              "ja-JP",
              "ko-KR",
              "lt-LT",
              "lv-LV",
              "ms-MY",
              "nb-NO",
              "nl-BE",
              "nl-NL",
              "pl-PL",
              "pt-BR",
              "pt-PT",
              "ro-RO",
              "ru-RU",
              "sk-SK",
              "sl-SI",
              "sr-RS",
              "sv-SE",
              "th-TH",
              "tr-TR",
              "uk-UA",
              "vi-VN",
              "zh-HK",
              "zh-TW"
            ],
            "type": "string",
            "description": "Country and language together, as one value. 60 markets are available, each one verified to answer in its own language from its own outlets - an unrecognised market is not rejected by the source, it quietly returns some other country's results, so only verified values are offered. This applies to the news surface. The web surface ignores it and is always read as en-US, because every other market returned unrelated results in testing; web rows are stamped en-US so you can see which happened.",
            "default": "en-US"
          },
          "maxResultsPerQuery": {
            "title": "Max results per keyword",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Cap on results saved for each keyword, per surface, and the main cost control since charging is per result. News pages to roughly 100 unique results per keyword before it starts repeating, and the run stops early when a page adds nothing new. The web surface returns at most 10 results per keyword no matter what this is set to - that surface has no page 2, and no amount of paging finds one.",
            "default": 20
          },
          "freshness": {
            "title": "How recent",
            "enum": [
              "any",
              "day",
              "week"
            ],
            "type": "string",
            "description": "Narrows the news request itself. The boundaries belong to the source and are approximate: \"day\" measured a little over 24 hours and \"week\" a little over six days, and they shift between keywords. For an exact cutoff use \"Published after\" instead, which is applied to the publish date after the fetch. News only.",
            "default": "any"
          },
          "dateFrom": {
            "title": "Published after",
            "type": "string",
            "description": "Oldest result to keep. Absolute as 2026-01-15, or relative as \"7 days\", \"36 hours\", \"3 months\". Applied exactly to the publish date after the fetch, so it means the same thing whatever \"How recent\" did. News rows only - a web row has no verified publish date, so it is never filtered by this."
          },
          "dateTo": {
            "title": "Published before",
            "type": "string",
            "description": "Newest result to keep, in the same formats. Ignored unless \"Published after\" is also set, because a range needs a start; the run says so in the log when that happens."
          },
          "deduplicateBy": {
            "title": "Collapse duplicates by",
            "enum": [
              "url",
              "title",
              "none"
            ],
            "type": "string",
            "description": "This source syndicates one story across many outlets. \"url\" removes only the identical address arriving twice. \"title\" also collapses syndication, which is often what you want and sometimes throws away distinct regional rewrites. \"none\" keeps everything. Collapsing happens across the whole run and per surface, so a result two of your keywords both return is saved and charged once - set \"none\" if you want one row per keyword regardless.",
            "default": "url"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}