Google Sheets integration
A lead log in Google Sheets
Paste one Apps Script into your sheet, deploy it as a web app, and Needle adds a row for every lead it finds - one column per field.
7-day free trial - no card. Cancel anytime.
How it works
- Step 1
Save a brand and turn on Auto Search
Add the problem phrases, competitors, and communities you care about. Needle reruns the search on your schedule.
- Step 2
Add the script
In the sheet, open Extensions → Apps Script, replace the sample code with needle-google-sheets.gs, and save.
- Step 3
Deploy it as a web app
Deploy → New deployment → Web app. Execute as: Me. Who has access: Anyone. Authorize it, then copy the URL ending in /exec.
- Step 4
Test and enable in Needle
Paste the /exec URL under Alerts & Integrations → Google Sheets and click Test and enable. The test writes the header row only.
Why teams log Needle leads in Sheets
Available on the Growth plan and up.
Nothing to install
The script runs in your own Google account. Needle never gets access to your Drive.
Work the list your way
Add owner, status, or notes columns to the right of the Needle columns; the script leaves them alone.
No duplicate rows
The script skips an event_id it has already written, on top of Needle’s own 30-day dedupe.
Download the Apps Script
One file, with the setup steps in its header comment.
needle-google-sheets.gs
- Writes to a tab named "Needle leads", created on the first request, with a frozen header row.
- Test events from Needle write the header row and no data row, so a test never leaves a fake lead in your sheet.
- Skips duplicates by checking the last 500 rows and a 6-hour cache of event_ids.
- After editing the script, use Deploy → Manage deployments → Edit → New version so the same /exec URL serves the new code.
Columns the script writes
In this order, from the flat LeadEvent v1 payload. Reading columns come first, ids last.
| Column | From the event |
|---|---|
| occurred_at | occurred_at |
| brand_name | brand.name |
| lead_tier | lead.tier |
| lead_platform | lead.platform |
| lead_title | lead.title |
| lead_url | lead.url |
| lead_author | lead.author |
| lead_excerpt | lead.excerpt |
| lead_posted_at | lead.posted_at |
| lead_score | lead.lead_score |
| lead_relevance | lead.relevance |
| lead_intent_type | lead.intent_type |
| lead_evidence | lead.evidence |
| lead_matched_term | lead.matched_term |
| lead_competitor_mentions | lead.competitor_mentions, joined as "A, B" |
| lead_dashboard_url | lead.dashboard_url |
| brand_id | brand.id |
| lead_id | lead.id |
| event | event |
| schema | schema |
| event_id | event_id |
When Google Sheets is the wrong choice
Every request must be verified
Apps Script cannot read request headers, so the script cannot check the signature. The /exec URL is the secret. If that is not enough, put n8n or your own endpoint in front of the sheet.
You want leads in a CRM
On Scale, HubSpot and Pipedrive create one record per lead directly.
You want to be alerted, not to log
A sheet does not ping anyone. Pair it with Slack or Google Chat alerts.
Checked 2026-10-30
- Google Apps Script: a web app’s doPost(e) receives the request body but not its headers, and web apps answer POST with a 302 redirect, which Needle treats as success. Source
Frequently asked questions
Setup, limits, and every platform are covered in the docs.
Which URL do I paste into Needle?
Is the request signed?
Can I change the columns?
Does Google Sheets get one request per lead or a digest?
Which plan includes Google Sheets?
Does Needle reply or post for me?
Connect Needle to Google Sheets today
Send ranked buyer threads to Google Sheets on your Auto Search schedule, so the conversations worth replying to land where your team already works.
Cancel anytime