Problem

As a growth marketer, I wanted a reliable daily feed of the latest growth hacking and marketing content from LinkedIn – without doomscrolling for hours. Most tools were noisy, didn’t filter for relevance, or were just plain expensive.

Solution

So I built my own growth content radar using Google Apps Script + SERP API. It automatically fetches fresh posts from LinkedIn every day, filters them by topic, and sends them to me via Google Chat. Zero manual effort.

Implementation

  • Tech Stack: Google Apps Script + SERP API + Google Chat Webhook.

  • I used SERP API to search the internet for different keywords (like “growth hack”, “CRO”, “SEO”, etc.) using  site:linkedin.com/posts operator.

  • It fetched and logged the top 10 organic results to a Google Sheet.

    // Apps Script code for finding Linkedin Posts

    const SERP_API_KEY = ‘API_KEY’;

    // Monday Keywords
    function searchAndAddToSheet() {
    // Define the queries.
    const queries = [
    ‘site:linkedin.com/posts/ “growth hack”‘
    ];

    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“All”);
    if (!sheet) {
    throw new Error(‘Sheet not found.’);
    }
    sheet.clear();

    sheet.appendRow([‘Title’, ‘Link’, ‘Snippet’]);

    queries.forEach(query => {

    const url = `https://serpapi.com/search.json?q=${encodeURIComponent(query)}&engine=google&api_key=${SERP_API_KEY}&num=10&lr=lang_en&tbs=qdr:d5`;
    try {
    const response = UrlFetchApp.fetch(url);
    const json = JSON.parse(response.getContentText());

    if (json.organic_results && json.organic_results.length > 0) {
    json.organic_results.forEach(result => {
    sheet.appendRow([
    result.title || ‘No Title’,
    result.link || ‘No Link’,
    result.snippet || ‘No Snippet’
    ]);
    });
    } else {
    sheet.appendRow([‘No results found’, ”, ”]);
    }
    } catch (error) {
    Logger.log(`Error for query “${query}”: ${error}`);
    sheet.appendRow([‘Error fetching results’, ”, ”]);
    }

    Utilities.sleep(2000);
    });
    }

    //Similarly for tuesday, wednesday, thursday, friday, saturday, sunday.

  • Once the results were in, they were sent to a Google Chat channel in the following structure:
    post title + link to my Google Chat channel.

    function sendLinksToChat() {
    var webhookUrl = “https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=CHAT_KEY”;

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ss.getSheets();

    sheets.forEach(function(sheet) {
    var data = sheet.getDataRange().getValues();

    for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var title = row[0] || “”;
    var link = row[1];
    var snippet = row[2] || “”;

    var message = title + “: ” + link;
    var payload = JSON.stringify({ text: message });

    var options = {
    method: “post”,
    contentType: “application/json”,
    payload: payload
    };

    try {
    UrlFetchApp.fetch(webhookUrl, options);
    Logger.log(“Sent message for row ” + (i+1) + ” in sheet ‘” + sheet.getName() + “‘”);
    Utilities.sleep(1000); // Pause to avoid hitting rate limits
    } catch (e) {
    Logger.log(“Error sending message: ” + e.toString());
    }
    }
    });
    }

  • I added daily trigger for both of the code above to avoid any manual work.

Results

  • 💡 Discovered 2-3 high-value posts daily with no manual effort

  • 📈 Inspired multiple content ideas + experiments

  • ⏱️ Saved hours every week scrolling

  • 🔔 Made growth updates part of our daily routine via Chat notifications

View other case studies