Social Listening on a Budget: API, Spreadsheet and AI Agent
Social listening tools often start at a few hundred dollars a month. If you track a handful of keywords and one person reads the results, you can build something useful for about the price of a lunch. The stack has three parts: a data API to fetch posts, a Google Sheet to store them, and an AI agent to summarize them each week.
What you will build
- A sheet named
mentionswith one row per post: id, fetched at, platform, query, author, text, likes, URL. - A script that runs every six hours, searches each keyword, and adds only new posts.
- A weekly prompt that turns the sheet into a one-page summary.
Step 1: pick keywords
Start with 5 to 10 queries: your brand name, a common misspelling, your main product, one competitor and one category phrase your buyers use. Test each by hand. If most results are noise, add a second word or drop it.
Step 2: the sheet and the script
Create a sheet, add the header row, then open Extensions, Apps Script. Store your API key under Project Settings, Script properties, as SCRAPEIO_KEY so it is not in the code.
const QUERIES = ["yourbrand", "your brand", "yourproduct"];
function pull() {
const key = PropertiesService.getScriptProperties().getProperty("SCRAPEIO_KEY");
const sheet = SpreadsheetApp.getActive().getSheetByName("mentions");
const seen = new Set(sheet.getRange("A2:A").getValues().flat().filter(String).map(String));
QUERIES.forEach(function (q) {
const url = "https://scrapeio.com/v1/twitter/search?type=latest&query=" + encodeURIComponent(q);
const res = UrlFetchApp.fetch(url, { headers: { "x-api-key": key }, muteHttpExceptions: true });
if (res.getResponseCode() !== 200) return;
const items = JSON.parse(res.getContentText()).data.items;
items.forEach(function (p) {
const id = "x:" + p.id;
if (seen.has(id)) return;
seen.add(id);
sheet.appendRow([id, new Date(), "x", q, p.author ? p.author.handle : "", p.caption, p.likes, p.url]);
});
});
}
Add a time-driven trigger to run pull every 6 hours. To add a platform, copy the block with a different search path, for example Reddit or TikTok search, and a different prefix on the id.
Step 3: stay inside Apps Script quotas
Google lists these limits for consumer accounts: 20,000 URL Fetch calls a day, 90 minutes of trigger runtime a day, and 6 minutes per execution. Workspace accounts get 100,000 fetches and 6 hours. Ten queries on four platforms every six hours is 160 fetches a day, far below the limit. If a run gets close to 6 minutes, split platforms into separate functions.
Step 4: the cost math
calls per month = queries × platforms × runs per day × 30
= 10 × 4 × 4 × 30 = 4,800
cost = 4,800 / 1,000 × $1.88 = about $9
Hourly runs would be 28,800 calls, about $54. Repeats served from cache and failed calls cost nothing, so the real bill is usually lower.
Step 5: the weekly summary
Export the last 7 days as CSV, or connect an agent that can read the sheet, and use a prompt like this:
Here are this week's social mentions of [brand] as CSV.
1. Group them into themes. Give a count and 2 example links per theme.
2. List every complaint or question that has no reply from us.
3. Flag posts with more than 1,000 likes.
4. Compare volume to last week's total of [N].
Keep it under 300 words. Quote posts exactly; do not paraphrase numbers.
If the agent has a social data MCP server connected, ask it to open the top three posts and read their comments before writing the summary.
Keep the sheet clean
- Freeze the header row and sort by fetched date, newest first.
- Add a
statuscolumn with three values: new, replied, ignore. Filter on new each morning. - Add a
themecolumn and fill it during the weekly review, so trends show up over months. - Archive rows older than 90 days to a second tab. Apps Script gets slower as a sheet grows.
- Check each query once a month. Drop the ones that only bring noise and add new product names.
Free extras
- Google Alerts for press and blogs, delivered to the same inbox.
- Bluesky Jetstream if your audience is on Bluesky: its live tail needs no authentication.
- Conditional formatting in the sheet to highlight rows with high likes.
When to upgrade to a paid tool
- More than one team needs dashboards and sentiment.
- You need history from before you started collecting.
- Mentions run into the thousands a day and the sheet gets slow. Move storage to a database first; that alone often solves it.
Doing it with ScrapeIO
The script above uses the X search API. Swap in the Reddit search API, TikTok keyword search or Threads search and the rest of the code stays the same, because every platform returns the same envelope and field names. Signup includes 100 free credits with no card, enough to test the whole setup, and the hosted MCP server at /agents covers the agent step.
Sources
Checked on 8 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.
- https://developers.google.com/apps-script/guides/services/quotas
- https://www.google.com/alerts
- https://bsky.network/docs/jetstream/
100 free credits, no card. Credits never expire.
Get API key