Promo Seeker automatically finds, verifies, and delivers active promo codes to users via Telegram or email using SerpAPI + Gemini (OpenRouter). Saves hours of manual searching and deduplicates results into an n8n Data Table for fast reuse.
Time Savings: Reduces manual promo hunting from ~2 hours to ~5 minutes per query.
Cost Reduction: Cuts reliance on paid scraping tools or manual services — potential savings of $50–$200/month.
Error Prevention: Cross-references sources and enforces a 30‑day recency filter to reduce expired-code hits by ~60% vs single-source checks.
Scalability: Handles hundreds of queries per day with Data Table upserts and optional scheduling for continuous discovery.
Requirement | Type | Purpose |
---|---|---|
n8n instance | Essential | Execute the workflow — import JSON to your n8n instance |
SerpAPI account | Essential | Web search results for promo code discovery |
OpenRouter (Gemini) account | Essential | Language model (Gemini 2.5 Pro) for extraction and verification |
Telegram Bot (BotFather) | Essential | Receive queries and send promo notifications |
Gmail OAuth2 | Essential | Send rich email notifications |
n8n Data Tables | Essential | Store and deduplicate promo code records |
Get your n8n instance here: n8n instance — import the JSON and begin configuration. (Repeat link for convenience) n8n instance
{ "platform":"example.com", "email":"[email protected]" }
Node | Purpose | Key Configuration |
---|---|---|
SerpAPI | Fetch web search results | Provide credential; adjust search params in agent prompt |
Gemini 2.5Pro (OpenRouter) | Extract & verify promo details | Use OpenRouter credential; model google/gemini-2.5-pro |
Promo Seeker Agent (LangChain) | Orchestrates search + parsing | System prompt enforces 30‑day recency & result format |
Structured Output Parser | Validates agent output | JSON schema example for platform/code/value/terms/validUntil |
Data Table (Get row(s)) | Lookup existing promos | Filters by platform; limit = 3 |
If (Code Exist?) | Branching logic | Checks existence of platform field |
Data Table (Upsert row(s)) | Insert or update promo | Mapping from agent output to Data Table columns |
Telegram Trigger / Telegram | Receive queries & notify users | Webhook-based trigger; parse_mode = HTML for messages |
Gmail | Send rich HTML emails | Uses Gmail OAuth2 credential |
Webhook / Form Trigger | Alternate inputs | Webhook path /v1/promo-seeker and Form trigger for manual submissions |
Metric | Expected Performance | Optimization Tips |
---|---|---|
Execution time | 8–30s per new search (depends on SerpAPI + LM response) | Reduce SerpAPI page depth; cache recent results |
API calls | 3–10 SerpAPI calls per complex query | Batch queries; use higher-quality search params |
Error handling | Agent retries on malformed output | Use retry nodes and set onError strategy for downstream nodes |
Problem | Cause | Solution |
---|---|---|
No results returned | Query too vague or rate-limited API | Improve query specificity; check SerpAPI quota |
Gmail send fails | OAuth scope not granted or token expired | Reconnect Gmail OAuth2 credential in n8n |
Telegram webhook not firing | Incorrect bot token or webhook setup | Recreate Telegram credential and check bot permissions |
Duplicate rows | Upsert mapping mismatch | Ensure promoCode mapping in Upsert matches structured output |
Agent returns malformed JSON | LM prompt too permissive | Tighten the agent system prompt and validate with Structured Output Parser |
Created by: khaisa Studio
Category: Marketing Automation
Tags: promo-codes, coupons, serpapi, telegram, gmail, openrouter, data-tables
Need custom workflows or help adapting this template? Contact us