# Live feeds: sync leads to Google Sheets · Leadraft

URL: https://leadraft.co/docs/feeds
Summary: A private CSV or JSON link to a segment of your leads. Google Sheets, Airtable, Zapier, Make and n8n can read it and stay up to date as searches find more.

Docs · Deliver leads · Last updated October 31, 2026

# Live feeds

A private link to a segment of your leads, as CSV or JSON. Paste it into a Google Sheet and the sheet keeps up with your searches by itself.

## Create a feed

Open **Export** on any search or on the leads screen, choose **Google Sheet**, pick the segment (which grades, which filters) and name it. You get a link that starts with `lgf_`. It's shown once: the link is the credential, so treat it like a password. Revoking it stops it working immediately.

## Google Sheets

Paste this into cell A1 of an empty sheet:

Cell A1

```
=IMPORTDATA("https://app.leadraft.co/api/feeds/lgf_your_feed_token.csv")
```

Google refreshes it by itself, about once an hour. Rows are oldest first, so existing rows keep their place as new leads are added below.

## JSON, for automation tools

Swap `.csv` for `.json` to read the same rows from Zapier, Make, n8n, Airtable scripts or your own code:

Request

```
curl "https://app.leadraft.co/api/feeds/lgf_your_feed_token.json"
```

Response

```
{
  "feed": "Austin dentists",
  "count": 702,
  "truncated": false,
  "max_rows": 5000,
  "emails_withheld": 0,
  "leads": [ { "email": "hello@brightsmile.example", "business": "Bright Smile Dental", … } ]
}
```

## Rules

-   Up to 5,000 rows per feed (`truncated` says when there are more). For bigger lists, export a file or use the API.
-   Same rows as a file export: your chosen grades (Verified only by default), the do-not-contact list applied, invalid addresses never, one row per business.
-   Two layouts: **Full** (every field) or **Instantly** (the columns Instantly imports).
-   30 fetches a minute per feed. Fetching needs no sign-in, since spreadsheets can't send one.
-   Spreadsheet formulas in the data are neutralized, so a business name can't run code in your sheet.

## Fields (Full layout)

| Field | Description |
| --- | --- |
| Email |
| `email` | Best sendable address. |
| `email_grade` | valid · catch\_all · risky · unknown. |
| `email_confidence` | 0–1. |
| `email_role` | e.g. generic (info@), personal, sales. |
| `email_source` | Where it was found (website page, sitemap, rendered page, pattern…). |
| `email_note` | The mail server's answer, shortened. |
| `email_verified_at` | ISO time of the check. |
| `free_provider` | true for Gmail, Outlook and similar. |
| `email_2 … email_5, email_N_grade` | Other sendable addresses, best first. |
| Business |
| `business` | Name. |
| `category, categories` | Google Maps category and all categories. |
| `rating, reviews, price_level` | From the listing. |
| `phone, phone_display, phone_type` | E.164, as listed, and line type when known. |
| `website, website_platform, website_phones, contact_form` | Site, detected platform, phones on the site, whether it has a contact form. |
| `hours` | Opening hours for the week. |
| `facebook, instagram, linkedin, x, tiktok, youtube, yelp, whatsapp` | Social profiles found on the site. |
| Location |
| `address, city, state, postal_code, country` | Address parts; country is a two-letter code. |
| `lat, lng` | Coordinates. |
| `service_area` | true for a service-area business (no storefront). |
| `in_area, distance_km` | Inside the searched area, and km from its boundary (0 inside). |
| Identifiers |
| `place_id` | Leadraft's lead id (the \`id\` in the API). |
| `google_place_id, cid, maps_url, reviews_url` | Google identifiers and links. |
| `first_seen, last_seen` | When we first and last saw the listing. |

## Related pages

-   [WebhooksPush instead of pull](https://leadraft.co/docs/webhooks)
-   [REST API reference](https://leadraft.co/docs/api)

Last built: 2026-11-09
