{"id":28998666,"url":"https://github.com/luminati-io/google-search-api","last_synced_at":"2025-06-25T07:09:35.823Z","repository":{"id":283783991,"uuid":"939216864","full_name":"luminati-io/google-search-api","owner":"luminati-io","description":"Two methods to collect real Google SERP data—a free scraper for basic use and the enterprise-grade Bright Data API for high-volume demands.","archived":false,"fork":false,"pushed_at":"2025-02-26T07:45:43.000Z","size":6566,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-22T07:02:01.523Z","etag":null,"topics":["data","google-scraper","html","python","serp-api","web-scraping"],"latest_commit_sha":null,"homepage":"https://brightdata.com/products/serp-api/google-search","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luminati-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-26T07:25:30.000Z","updated_at":"2025-02-26T07:57:10.000Z","dependencies_parsed_at":"2025-03-22T07:02:26.713Z","dependency_job_id":"1e082b09-b8df-4273-ba66-38dbdd9508a5","html_url":"https://github.com/luminati-io/google-search-api","commit_stats":null,"previous_names":["luminati-io/google-search-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/luminati-io/google-search-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luminati-io%2Fgoogle-search-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luminati-io%2Fgoogle-search-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luminati-io%2Fgoogle-search-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luminati-io%2Fgoogle-search-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luminati-io","download_url":"https://codeload.github.com/luminati-io/google-search-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luminati-io%2Fgoogle-search-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261823775,"owners_count":23215150,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","google-scraper","html","python","serp-api","web-scraping"],"created_at":"2025-06-25T07:09:32.458Z","updated_at":"2025-06-25T07:09:35.760Z","avatar_url":"https://github.com/luminati-io.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Google Search API\n\n[![Promo](https://github.com/luminati-io/LinkedIn-Scraper/blob/main/Proxies%20and%20scrapers%20GitHub%20bonus%20banner.png)](https://brightdata.com/products/serp-api/google-search) \n\n\u003e ⚠️ As of January 2025, [Google requires JavaScript](https://techcrunch.com/2025/01/17/google-begins-requiring-javascript-for-google-search/) to render search results. This update aims to block traditional bots, scrapers, and SEO tools that rely on non-JavaScript-based methods. As a result, businesses using Google Search for market research or ranking analysis must adopt tools that support JavaScript rendering.\n\n\nThis repository provides two approaches for collecting Google SERP data:\n\n1. A free, small-scale scraper suitable for basic data collection\n2. An enterprise-grade API solution built for high-volume and robust data needs\n\n\n## Table of Contents\n- [Free Scraper](#free-scraper)\n  - [Input Parameters](#input-parameters)\n  - [Implementation](#implementation)\n  - [Sample Output](#sample-output)\n  - [Limitations](#limitations)\n- [Bright Data Google Search API](#bright-data-google-search-api)\n  - [Key Features](#key-features)\n  - [Getting Started](#getting-started)\n  - [Direct API Access](#direct-api-access)\n  - [Native Proxy-Based Access](#native-proxy-based-access)\n- [Advanced Features](#advanced-features)\n  - [Localization](#localization)\n  - [Search Type](#search-type)\n  - [Pagination](#pagination)\n  - [Geo-Location](#geo-location)\n  - [Device Type](#device-type)\n  - [Browser Type](#browser-type)\n  - [Parsing Results](#parsing-results)\n  - [Hotel Search](#hotel-search)\n  - [Parallel Searches](#parallel-searches)\n  - [AI Overview](#ai-overview)\n- [Support \u0026 Resources](#support--resources)\n\n\n## Free Scraper\nA lightweight Google scraper for basic data collection needs.\n\n\u003cimg width=\"700\" alt=\"google-search-result\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416310595-58573147-5ac2-4cb3-bb5e-295d76f6972c.png\" /\u003e\n\n### Input Parameters\n\n- **File:** List of search terms to query in Google (required)\n- **Pages:** Number of Google pages to scrape data from\n\n### Implementation\nModify these parameters in the [Python file](https://github.com/luminati-io/Google-Search-API/blob/main/free_google_scraper/google_serp.py):\n\n```python\nHEADLESS = False        \nMAX_RETRIES = 2         \nREQUEST_DELAY = (1, 4) \n\nSEARCH_TERMS = [\n    \"nike shoes\",\n    \"macbook pro\"\n]\nPAGES_PER_TERM = 3      \n```\n\n💡 **Tip:** Set `HEADLESS = False` to help avoid Google's detection mechanisms.\n\n### Sample Output\n\u003cimg width=\"700\" alt=\"google-serp-data\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416109839-c7048fc9-44c3-4553-8117-2b238d354f70.png\" /\u003e\n\n\n### Limitations\n\nGoogle implements several anti-scraping measures:\n\n1. **CAPTCHAs:** Used to differentiate between humans and bots\n2. **IP Blocks:** Temporary or permanent bans for suspicious activity\n3. **Rate Limiting:** Rapid requests may trigger blocks\n4. **Geotargeting:** Results vary by location, language, and device\n5. **Honeypot Traps:** Hidden elements to detect automated access\n\nAfter multiple requests, you'll likely encounter Google's CAPTCHA challenge:\n\n\u003cimg width=\"700\" alt=\"google-captcha\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/414117571-21ab3e9f-1162-4aef-9e22-fb08491dd928.png\" /\u003e\n\n## Bright Data Google Search API\n[Bright Data's Google Search API](https://brightdata.com/products/serp-api/google-search) provides real-user search results from Google using customizable search parameters. Built on the same advanced technology as the [SERP API](https://brightdata.com/products/serp-api), it delivers high success rates and robust performance for scraping publicly available data at scale.\n\n\n### Key Features\n\n- High Success Rates, even with large volumes\n- Pay only for successful requests\n- Fast response time - under 5 seconds\n- Geolocation targeting – Extract data from any country, city, or device\n- Output formats – Retrieve data in JSON or raw HTML\n- Multiple search types – News, images, shopping, jobs, etc\n- Asynchronous requests – Fetch results in batches\n- Built for scale – Handles high traffic and peak loads\n\n📌 Test it for free in our [SERP Playground](https://brightdata.com/products/serp-api/google-search):\n\n\u003cimg width=\"700\" alt=\"bright-data-serp-api-playground\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416966701-8d516e08-37a1-4723-bf12-9a9da6a13b1a.png\" /\u003e\n\n\n### Getting Started\n\n1. **Prerequisites:**\n    - Create a [Bright Data account](https://brightdata.com/) (new users receive a $5 credit)\n    - Obtain your [API key](https://docs.brightdata.com/general/account/api-token)\n2. **Setup:** Follow the [step-by-step guide](https://github.com/luminati-io/Google-Search-API/blob/main/setup_serp_api.md) to integrate the SERP API into your Bright Data account\n3. **Implementation Methods:**\n    - Direct API Access\n    - Native Proxy-Based Access\n\n\n### Direct API Access\nThe simplest method is to make a direct request to the API.\n\n**cURL Example**\n```bash\ncurl https://api.brightdata.com/request \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer API_TOKEN\" \\\n  -d '{\n        \"zone\": \"ZONE_NAME\",\n        \"url\": \"https://www.google.com/search?q=ollama\u0026brd_json=1\",\n        \"format\": \"raw\"\n      }'\n```\n\n**Python Example**\n```python\nimport requests\nimport json\n\nurl = \"https://api.brightdata.com/request\"\n\nheaders = {\"Content-Type\": \"application/json\", \"Authorization\": \"Bearer API_TOKEN\"}\n\npayload = {\n    \"zone\": \"ZONE_NAME\",\n    \"url\": \"https://www.google.com/search?q=ollama\u0026brd_json=1\",\n    \"format\": \"raw\",\n}\n\nresponse = requests.post(url, headers=headers, json=payload)\n\nwith open(\"serp_direct_api.json\", \"w\") as file:\n    json.dump(response.json(), file, indent=4)\n\nprint(\"Response saved to 'serp_direct_api.json'.\")\n```\n\n👉 View [full JSON output](https://github.com/luminati-io/Google-Search-API/blob/main/google_search_api_outputs/serp_direct_api.json)\n\n\u003e **Note**: Use `brd_json=1` for parsed JSON or `brd_json=html` for parsed JSON + full nested HTML.\n\nLearn more about parsing search results in our [SERP API Parsing Guide](https://docs.brightdata.com/scraping-automation/serp-api/parsing-search-results).\n\n### Native Proxy-Based Access\nAlternatively, you can use our proxy routing method.\n\n**cURL Example**\n```bash\ncurl -i \\\n  --proxy brd.superproxy.io:33335 \\\n  --proxy-user \"brd-customer-\u003cCUSTOMER_ID\u003e-zone-\u003cZONE_NAME\u003e:\u003cZONE_PASSWORD\u003e\" \\\n  -k \\\n  \"https://www.google.com/search?q=ollama\"\n```\n\n**Python Example**\n```python\nimport requests\nimport urllib3\n\nurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\nhost = \"brd.superproxy.io\"\nport = 33335\nusername = \"brd-customer-\u003ccustomer_id\u003e-zone-\u003czone_name\u003e\"\npassword = \"\u003czone_password\u003e\"\nproxy_url = f\"http://{username}:{password}@{host}:{port}\"\n\nproxies = {\"http\": proxy_url, \"https\": proxy_url}\n\nurl = \"https://www.google.com/search?q=ollama\"\nresponse = requests.get(url, proxies=proxies, verify=False)\n\nwith open(\"serp_native_proxy.html\", \"w\", encoding=\"utf-8\") as file:\n    file.write(response.text)\n\nprint(\"Response saved to 'serp_native_proxy.html'.\")\n```\n\n👉 View [full HTML output](https://github.com/luminati-io/Google-Search-API/blob/main/google_search_api_outputs/serp_native_proxy.html)\n\nFor production, load Bright Data’s SSL certificate (see our [SSL Certificate Guide](https://docs.brightdata.com/general/account/ssl-certificate)).\n\n## Advanced Features\n\n### Localization\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-localization\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416281053-eb050c00-3c35-451b-a2d2-e98e16f91aee.png\" /\u003e\n\n\n1. `gl` (Country Code)\n    - Two-letter country code that determines the country for search results\n    - Simulates a search as if made from a specific country\n    \n    Example: Search for restaurants in France\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+restaurants+in+paris\u0026gl=fr\"\n    ```\n    \n2. `hl` (Language Code)\n    - Two-letter language code that sets the language of page content\n    - Affects the interface and search results language\n    \n    Example: Search for sushi restaurants in Japan (results in Japanese)\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+sushi+restaurants+in+tokyo\u0026hl=ja\"\n    ```\n    \n    You can use both parameters together for better localization:\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+hotels+in+berlin\u0026gl=de\u0026hl=de\"\n    ```\n\n### Search Type\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-search-type\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416280410-49853108-5e3d-4062-831b-8d55711d5f54.png\" /\u003e\n\n1. `tbm` (Search Category)\n    - Specifies a particular search type (images, news, etc.)\n    - **Options**:\n        - `tbm=isch` → **Images**\n        - `tbm=shop` → **Shopping**\n        - `tbm=nws` → **News**\n        - `tbm=vid` → **Videos**\n    \n    **Example** (Shopping search):\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=macbook+pro\u0026tbm=shop\"\n    ```\n    \n2. `ibp` (Jobs Search Parameter)\n    - Use specifically for jobs-related searches\n    - Example: `ibp=htl;jobs` returns job listings\n    \n    **Example**:\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=technical+copywriter\u0026ibp=htl;jobs\"\n    ```\n\n### Pagination\n\nNavigate through pages of results or adjust the number of displayed results:\n\n1. `start`\n    - Defines the starting point for search results\n    - Examples:\n        - `start=0` (default) - First page\n        - `start=10` - Second page (results 11-20)\n        - `start=20` - Third page (results 21-30)\n    \n    **Example** (Start from the 11th result):\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=best+coding+laptops+2025\u0026start=10\"\n    ```\n    \n2. `num`\n    - Defines how many results to return per page\n    - Examples:\n        - `num=10` (default) - Returns 10 results\n        - `num=50` - Returns 50 results\n    \n    **Example** (Return 40 results):\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=best+coding+laptops+2025\u0026num=40\"\n    ```\n\n\n### Geo-Location\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-geolocation\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416279186-af64c770-0c8a-4007-9415-304d2e0c0fe8.png\" /\u003e\n\nThe `uule` parameter customizes search results based on a specific location:\n\n- It requires an encoded string, not plain text.\n- Locate the raw location string in the Canonical Name column of [Google's geotargeting CSV](https://developers.google.com/adwords/api/docs/appendix/geotargeting).\n- Convert the raw string into the encoded format using a third-party converter or a built-in library.\n- Include the encoded string in your API request as the value for `uule`.\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+hotels+in+paris\u0026uule=w+CAIQICIGUGFyaXM\"\n```\n\n### Device Type\n\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-device-type\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416278511-cf0f203f-5d62-4eb9-9d28-7a50d75c7a00.png\" /\u003e\n\n\nUse the `brd_mobile` parameter to simulate requests from specific devices:\n\n| Value | Device | User-Agent Type |\n| --- | --- | --- |\n| `0` or omit | Desktop | Desktop |\n| `1` | Mobile | Mobile |\n| `ios` or `iphone` | iPhone | iOS |\n| `ipad` or `ios_tablet` | iPad | iOS Tablet |\n| `android` | Android | Android |\n| `android_tablet` | Android Tablet | Android Tablet |\n\n**Example: Mobile Search**\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+laptops\u0026brd_mobile=1\"\n```\n\n### Browser Type\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-browser-type\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416277969-df382cb0-0eb2-4fb1-982c-2fa3401cc83a.png\" /\u003e\n\nUse the `brd_browser` parameter to simulate requests from specific browsers:\n\n- `brd_browser=chrome` — Google Chrome\n- `brd_browser=safari` — Safari\n- `brd_browser=firefox` — Mozilla Firefox (not compatible with `brd_mobile=1`)\n\nIf not specified, the API uses a random browser.\n\n**Example**:\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+gaming+laptops\u0026brd_browser=chrome\"\n```\n\n**Example** (Combining browser and device type):\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+smartphones\u0026brd_browser=safari\u0026brd_mobile=ios\"\n```\n\n### Parsing Results\n\nReceive search results in a structured format using the `brd_json` parameter:\n\n- **Options**:\n    - `brd_json=1` - Returns results in parsed JSON format\n    - `brd_json=html` - Returns JSON with an additional `\"html\"` field containing raw HTML\n\nExample (JSON output):\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=best+hotels+in+new+york\u0026brd_json=1\"\n```\n\nExample (JSON with raw HTML):\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=top+restaurants+in+paris\u0026brd_json=html\"\n```\n\nLearn more in our [SERP API Parsing Guide](https://docs.brightdata.com/scraping-automation/serp-api/parsing-search-results).\n\n\n### Hotel Search\n\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-google-hotels-search\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416277071-0859191a-47c0-4373-b3af-a1bc04ea54b1.png\" /\u003e\n\n\nRefine hotel searches with these parameters:\n\n1. `hotel_occupancy` (Number of Guests)\n    - Sets the number of guests (up to 4)\n    - Examples:\n        - `hotel_occupancy=1` → For 1 guest\n        - `hotel_occupancy=2` → For 2 guests (default)\n        - `hotel_occupancy=4` → For 4 guests\n    \n    **Example** (Search for hotels in New York for 4 guests):\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=hotels+in+new+york\u0026hotel_occupancy=4\"\n    ```\n    \n2. `hotel_dates` (Check-in \u0026 Check-out Dates)\n    - Filters results for specific date ranges\n    - Format: YYYY-MM-DD, YYYY-MM-DD\n    \n    **Example** (Search for hotels in Paris from May 1 to May 3, 2025):\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=hotels+in+paris\u0026hotel_dates=2025-05-01%2C2025-05-03\"\n    ```\n    \n    **Combined Example**:\n    \n    ```bash\n    curl --proxy brd.superproxy.io:33335 \\\n         --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n         \"https://www.google.com/search?q=hotels+in+tokyo\u0026hotel_occupancy=2\u0026hotel_dates=2025-05-01%2C2025-05-03\"\n    ```\n\n### Parallel Searches\n\nSend multiple search requests simultaneously within the same peer and session—ideal for comparing results.\n\n1. Send a POST request with a `multi` array containing search variations\n2. Get a `response_id` for later result retrieval\n3. Retrieve results using the `response_id` once processing completes\n\n**Step 1: Send Parallel Requests**\n\n```bash\nRESPONSE_ID=$(curl -i --silent --compressed \\\n  \"https://api.brightdata.com/serp/req?customer=\u003ccustomer-id\u003e\u0026zone=\u003czone-name\u003e\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer API_TOKEN\" \\\n  -d $'{\n    \"country\": \"us\",\n    \"multi\": [\n      {\"query\": {\"q\": \"top+macbook+for+developers\", \"num\": 20}},\n      {\"query\": {\"q\": \"top+macbook+for+developers\", \"num\": 100}}\n    ]\n  }' | sed -En 's/^x-response-id: (.*)/\\1/p' | tr -d '\\r')\n\necho \"Response ID: $RESPONSE_ID\"\n```\n\n**Step 2: Fetch Results**\n\n```bash\ncurl -v --compressed \\\n     \"https://api.brightdata.com/serp/get_result?customer=\u003ccustomer-id\u003e\u0026zone=\u003czone-name\u003e\u0026response_id=${RESPONSE_ID}\" \\\n     -H \"Authorization: Bearer API_TOKEN\"\n```\n\nYou can also search for multiple keywords in one request:\n\n```bash\n{\n  \"multi\":[\n    {\"query\":{\"q\":\"best+smartphones+2025\"}},\n    {\"query\":{\"q\":\"best+laptops+2025\"}}\n  ]\n}\n```\n\nLearn more about asynchronous requests [here](https://docs.brightdata.com/scraping-automation/serp-api/asynchronous-requests).\n\n### AI Overview\n\n\u003cimg width=\"700\" alt=\"bright-data-google-search-api-screenshot-google-ai-overview\" src=\"https://github.com/luminati-io/google-search-api/blob/main/images/416276209-3c7be724-e8d9-45ed-b781-017b1cbec9d4.png\" /\u003e\n\nGoogle sometimes includes AI-generated summaries (AI Overviews) at the top of search results. Use `brd_ai_mode=1` to increase the chances of seeing these AI-generated overviews:\n\n```bash\ncurl --proxy brd.superproxy.io:33335 \\\n     --proxy-user \"brd-customer-\u003ccustomer-id\u003e-zone-\u003czone-name\u003e:\u003czone-password\u003e\" \\\n     \"https://www.google.com/search?q=how+does+caffeine+affect+sleep\u0026brd_ai_mode=1\"\n```\n\n\n## Support \u0026 Resources\n\n- **Documentation:** [SERP API Docs](https://docs.brightdata.com/scraping-automation/serp-api/)\n- **SEO Use Cases:** [SEO Tracking and Insights](https://brightdata.com/use-cases/serp-tracking)\n- **Other Guides:**\n    - [SERP API](https://github.com/luminati-io/serp-api)\n    - [Web Unlocker API](https://github.com/luminati-io/web-unlocker-api)\n    - [Google Maps Scraper](https://github.com/luminati-io/Google-Maps-Scraper)\n    - [Google News Scraper](https://github.com/luminati-io/Google-News-Scraper)\n- **Interesting Reads:**\n    - [Best SERP APIs](https://brightdata.com/blog/web-data/best-serp-apis)\n    - [Build a RAG Chatbot with SERP API](https://brightdata.com/blog/web-data/build-a-rag-chatbot)\n    - [Scrape Google Search with Python](https://brightdata.com/blog/web-data/scraping-google-with-python)\n- **Technical Support:** [Contact Us](mailto:support@brightdata.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluminati-io%2Fgoogle-search-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluminati-io%2Fgoogle-search-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluminati-io%2Fgoogle-search-api/lists"}