Web Search
Pricing
from $1.00 / 1,000 search results
Web Search
Search the web and get organic results as JSON with title, URL, snippet, and position. You can filter by date, country, language, and domain. The Actor provides a real-time API.
Web Search
Pricing
from $1.00 / 1,000 search results
Search the web and get organic results as JSON with title, URL, snippet, and position. You can filter by date, country, language, and domain. The Actor provides a real-time API.
You can access the Web Search programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "vopZSn1d8YRvdgakX" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/apify~web-search/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-apify-web-search", "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/apify~web-search/runs": { "post": { "operationId": "runs-sync-apify-web-search", "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/apify~web-search/run-sync": { "post": { "operationId": "run-sync-apify-web-search", "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": [ "query" ], "properties": { "query": { "title": "Search query", "type": "string", "description": "Plain search text, passed to the provider verbatim. Engine operator syntax (site:, intitle:, ...) is not supported - use allowedDomains/blockedDomains and dateFrom/dateTo instead." }, "provider": { "title": "Provider", "type": "string", "description": "Search engine to query. \"google\" is the only supported value in v1.", "default": "google" }, "maxResults": { "title": "Maximum results", "minimum": 1, "type": "integer", "description": "Maximum number of organic results to return. When omitted, every organic result on the fetched results page is returned. Fewer results come back when the page holds fewer, or when the domain filters drop some." }, "languageCode": { "title": "Language code", "type": "string", "description": "ISO 639-1 language code, for example \"en\", \"de\", \"cs\" - see https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes. A region suffix such as \"pt-BR\" is accepted too. It sets the language of the search engine interface and biases ranking toward pages written in that language. Results are neither translated nor strictly filtered by language.", "default": "en" }, "countryCode": { "title": "Country code", "type": "string", "description": "ISO 3166-1 alpha-2 country code, for example \"US\", \"DE\", \"CZ\". The search runs as if issued from that country: the matching Google domain is queried (google.de for \"DE\") and results are ranked for that market, which changes both the ordering and which local businesses appear. It does not restrict results to websites hosted or registered in that country. A country Google has no search domain for is rejected with INVALID_COUNTRY.", "default": "US" }, "location": { "title": "Location", "type": "string", "description": "Human-readable place name, most specific first, for example \"Paris, Ile-de-France, France\". It is applied to the search engine only, as the searcher's presumed location, so local and \"near me\" results match that place. It does not filter the pages themselves. Best-effort and not validated: Google may ignore a place it cannot resolve." }, "dateFrom": { "title": "Date from", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string", "description": "Inclusive lower bound on publication date. Best-effort - see the README." }, "dateTo": { "title": "Date to", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string", "description": "Inclusive upper bound on publication date. Best-effort - see the README." }, "allowedDomains": { "title": "Allowed domains", "maxItems": 10, "type": "array", "description": "Return only results from these domains. Max 10. A domain matches itself and all of its subdomains, so \"wikipedia.org\" also matches \"en.wikipedia.org\". A bare top-level domain works too: \"gov\" matches every domain under it. Examples: \"wikipedia.org\", \"docs.python.org\", \"gov\".", "items": { "type": "string" } }, "blockedDomains": { "title": "Blocked domains", "maxItems": 10, "type": "array", "description": "Exclude results from these domains. Max 10. Matching works as for allowedDomains: a domain matches itself and all of its subdomains, and a bare top-level domain matches everything under it. Examples: \"pinterest.com\", \"reddit.com\", \"ru\".", "items": { "type": "string" } } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Web Search from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: