# Google Autocomplete — Zapi reference
> Google's suggestion lists across five surfaces — web, YouTube, Images, local and Scholar. The same endpoint returns a different universe per surface.
**Base URL:** `https://api.zpi.web.id`
**Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys.
**Response envelope:** `{ status, message, content }`
**Rate limit:** 60 req/min on free tier.
**Related:**
- Detail page: https://zpi.web.id/api/autocomplete/google
- Endpoint catalog: https://zpi.web.id/category/autocomplete
- Concise index: https://zpi.web.id/llms.txt
- Full reference: https://zpi.web.id/llms-full.txt
---
## Google Autocomplete
**Category:** autocomplete · **Slug:** `google`
**Detail page:** https://zpi.web.id/api/autocomplete/google
Google's suggestion lists across five surfaces — web, YouTube, Images, local and Scholar. The same endpoint returns a different universe per surface.
**Tags:** google, suggest, keyword-research, seo, youtube
### Web
Web search autocomplete, with relevance scores.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/web`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed text to complete |
| `lang` | string | query | no | UI language, two letters. Default id |
| `region` | string | query | no | Country bias, two letters. Default ID |
| `count` | number | query | no | Cap the list. Default: everything the upstream returns |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/web?q=cara%20membuat&lang=id®ion=ID&count=10",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 15,
"items": [
{
"text": "cara membuat cv",
"relevance": 601
},
{
"text": "cara membuat npwp online",
"relevance": 600
},
{
"text": "cara membuat cv lamaran kerja",
"relevance": 562
},
{
"text": "cara membuat email baru",
"relevance": 561
},
{
"text": "cara membuat npwp",
"relevance": 560
},
{
"text": "cara membuat daftar isi otomatis",
"relevance": 559
},
{
"text": "cara membuat martabak manis",
"relevance": 558
},
{
"text": "cara membuat cireng",
"relevance": 557
}
],
"query": "cara membuat",
"locale": "id-ID",
"surface": "web",
"provider": "google"
}
```
---
### YouTube
Video search autocomplete.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/youtube`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed text to complete |
| `lang` | string | query | no | UI language, two letters. Default id |
| `count` | number | query | no | Cap the list. Default: everything the upstream returns |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/youtube?q=cara%20membuat&lang=id&count=10",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 14,
"items": [
{
"text": "cara membuat layangan"
},
{
"text": "cara membuat daftar isi otomatis word"
},
{
"text": "cara membuat donat"
},
{
"text": "cara membuat slime"
},
{
"text": "cara membuat cireng"
},
{
"text": "cara membuat bolu pisang"
},
{
"text": "cara membuat pesawat dari kertas"
},
{
"text": "cara membuat cilok"
}
],
"query": "cara membuat",
"locale": "id",
"surface": "youtube",
"provider": "google"
}
```
---
### Images
Image search autocomplete.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/images`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed text to complete |
| `lang` | string | query | no | UI language, two letters. Default id |
| `count` | number | query | no | Cap the list. Default: everything the upstream returns |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/images?q=kucing&lang=id&count=10",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 10,
"items": [
{
"text": "kucing"
},
{
"text": "kucing persia",
"highlighted": "kucing persia"
},
{
"text": "kucing lucu",
"highlighted": "kucing lucu"
},
{
"text": "kucing anggora",
"highlighted": "kucing anggora"
},
{
"text": "kucing munchkin",
"highlighted": "kucing munchkin"
},
{
"text": "kucing hutan",
"highlighted": "kucing hutan"
},
{
"text": "kucing bengal",
"highlighted": "kucing bengal"
},
{
"text": "kucing siam",
"highlighted": "kucing siam"
}
],
"query": "kucing",
"locale": "id",
"surface": "images",
"provider": "google"
}
```
---
### Local
Places and local search autocomplete.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/local`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed text to complete |
| `lang` | string | query | no | UI language, two letters. Default id |
| `count` | number | query | no | Cap the list. Default: everything the upstream returns |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/local?q=restoran&lang=id&count=10",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 10,
"items": [
{
"text": "restoran jakarta",
"highlighted": "restoran jakarta"
},
{
"text": "restoran jakarta selatan",
"highlighted": "restoran jakarta selatan"
},
{
"text": "restoran terdekat",
"highlighted": "restoran terdekat"
},
{
"text": "restoran"
},
{
"text": "restoran terdekat dari lokasi saya",
"highlighted": "restoran terdekat dari lokasi saya"
},
{
"text": "restoran jakarta timur",
"highlighted": "restoran jakarta timur"
},
{
"text": "restoran kelapa gading",
"highlighted": "restoran kelapa gading"
},
{
"text": "restoran di grand indonesia",
"highlighted": "restoran di grand indonesia"
}
],
"query": "restoran",
"locale": "id",
"surface": "local",
"provider": "google"
}
```
---
### Scholar
Academic search autocomplete.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/scholar`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed text to complete |
| `lang` | string | query | no | UI language, two letters. Default id |
| `count` | number | query | no | Cap the list. Default: everything the upstream returns |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/scholar?q=machine%20learning&lang=id&count=10",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 10,
"items": [
{
"text": "machine learning algorithms"
},
{
"text": "machine learning approach"
},
{
"text": "machine learning techniques"
},
{
"text": "machine learning models"
},
{
"text": "machine learning methods"
},
{
"text": "machine learning applications"
},
{
"text": "machine learning review"
},
{
"text": "machine learning classification"
}
],
"query": "machine learning",
"locale": "id",
"surface": "scholar",
"provider": "google"
}
```
---
### Expand
Expand one seed into the many real queries people type — the seed with every letter, question word and preposition appended, deduplicated.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/autocomplete:google/expand`
- **Cache TTL:** 1800s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `q` | string | query | yes | Seed to expand |
| `surface` | enum(web|youtube|images|local|scholar) | query | no | Which Google suggestion universe to expand. Default web |
| `modifiers` | enum(all|alphabet|questions|prepositions|digits) | query | no | Which modifier sets to append. Default all |
| `lang` | enum(id|en) | query | no | Language for the question and preposition sets. Default id |
| `count` | number | query | no | Cap the returned list. Default: every unique query found |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/autocomplete:google/expand?q=cara%20membuat&surface=web&modifiers=all&lang=id&count=200",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"seed": "cara membuat",
"count": 558,
"items": [
{
"via": "alphabet",
"text": "cara membuat akun google"
},
{
"via": "alphabet",
"text": "cara membuat akun"
},
{
"via": "alphabet",
"text": "cara membuat akun spmb"
},
{
"via": "alphabet",
"text": "cara membuat akun google baru"
},
{
"via": "alphabet",
"text": "cara membuat anak"
},
{
"via": "alphabet",
"text": "cara membuat ayam kecap"
},
{
"via": "alphabet",
"text": "cara membuat akta kelahiran"
},
{
"via": "alphabet",
"text": "cara membuat asinan buah"
}
],
"locale": "id",
"surface": "web",
"provider": "google",
"modifiers": "all",
"truncated": false,
"variantsTried": 44,
"variantsFailed": 0
}
```
---
_Generated: 2026-08-02T14:21:43.981Z_