Project Name:

How I Built a Startup Intelligence Table with Clay (Without Code)

Step-by-Step Explanation:

This is a step-by-step guide for creating a live, enriched company database using Clay. I used it to pull company domains, founder names, LinkedIn URLs, and work emails — all in one place.

Tools Used:

  • n8n

  • Gmail

Step 1: Daily Cron (Trigger Node)

  1. Go to n8n.io and create a new project.

  2. Add a new node called “Cron”. This is going to be our trigger node.

What it does: Automatically triggers the workflow every day at 08:00 AM (completely customizable)

Why: To run the entire process daily without manual intervention, so you get fresh summaries every morning.

Step 2: Get Google News RSS

What it does: Fetches the latest news articles from Google News RSS feed about "marketing".

Select “Add Node” -> “HTTP Request

How: It makes a GET request to the RSS URL https://news.google.com/rss/search?q=marketing&hl=en-US&gl=US&ceid=US:en.

Why: This gathers raw news data as XML for the topic you want to summarize.

Step 3: Parse RSS

What it does: Extracts the list of news items from the RSS XML response.

Select “Add Node” -> “Add XML

How: Using the parameters, it extracts the rss.channel.item array from the response and stores it in items.

Why: To convert the XML feed into a JSON array of individual news articles for easy processing.

Step 4: Limit Top 3 Results

Add a new node→ “Edit Fields (Set)”.

What it does: Limits the number of news articles processed to the top 3.

Why: You might want to summarize just the most important or recent 3 articles daily, avoiding overload or hitting API limits.

Step 5: Format News Items

Add a new node→ “Function Node”.

What it does: For each of the top 3 news items, it formats them into a consistent string with:

  • The news title

  • Description (if available)

  • Link to the article

Why: To create a clean, readable text snippet for each news story, ready for summarization.

Here is the JSON code I used:

const items = $input.all(); // all incoming items

// Extract news items array from the first item

const newsItems = items[0].json.rss.channel.item;

if (!newsItems || newsItems.length === 0) {

return [{ json: { text: "No news items found" } }];

}

const formattedArticles = newsItems.map(article => {

const title = article.title || "No title";

const link = article.link || "#";

const pubDate = article.pubDate ? new Date(article.pubDate).toLocaleDateString() : "No date";

const source = article.source?._ || "Unknown source";

return `🗞️ [${title}](${link})\nSource: ${source}\nDate: ${pubDate}`;

});

return [{ json: { text: formattedArticles.join("\n\n") } }];

Step 6: Combine News

Add a new node→ “Function Node”.

What it does: Joins all formatted news item texts into one single string separated by double line breaks (\n\n).

Why: The summarization API expects one big input text, so you combine the 3 articles into one chunk for summarization.

JSON code I used:

const combined = items.map(i => i.json.text).join('\n\n');

Step 7: Call My AI Service

What it does: Sends a POST request to my custom summarization API endpoint (mylocal Flask app exposed via ngrok). This is completely customizable according to each person’s needs.

For me, I discovered this to be the most streamlined and easy method to use, without extra tinkering needed on my side. Well, pun intended, as I tinkered alot with this until I got it to work haha.

How:

  • Sends JSON body with a prompt property containing:
    "Summarize these 3 marketing news stories into a concise, engaging newsletter:\n\n{{$json.combinedNotes}}"

  • Your AI service responds with a summarized text.

Why: This is the heart of the flow — the AI condenses the combined news text into a concise newsletter summary.

You can contact me through the contact form if you want the code for this one. As it is so different for everyone.


Code: ={{ $json["combinedNotes"] }}

Step 7: Send Email

Add a new node→ “HTTP Request”.

What it does: Sends an email with the summarized newsletter content.

How:

  • Uses your Gmail account credentials.

  • From and to your email address (can be the same or different).

  • Subject: "📰 Daily Marketing News Summary".

  • Email body uses dynamic content: {{$json.summary || $json.result || $json.generated_text || JSON.stringify($json)}} — it picks whichever field has the summary returned by your AI service.

Why: To deliver the summarized marketing news newsletter directly to your inbox every morning.

Upon request, I can send the whole project file to anyone that is interested. Just contact me through the contact form.