What This Agent Does
This powerful automation agent monitors advertising platforms for new creative content and automatically tracks them in a centralized Google Sheet. It searches for ads either by specific page IDs or keywords, intelligently filters out duplicates by comparing against existing records, and instantly notifies your team via Telegram and Slack when new ads are discovered.
Key benefits include:
-
Save 5-10 hours weekly on manual ad monitoring and data entry
-
Never miss competitor updates with automated scheduled checks
-
Eliminate duplicate entries through intelligent deduplication
-
Instant team alerts when new creative content appears
-
Centralized tracking with all ad data organized in one accessible spreadsheet
Perfect for: Competitive intelligence teams, marketing agencies tracking client ads, media buyers monitoring ad trends, and brand protection teams watching for unauthorized use of assets.
Who Is It For
This workflow is ideal for:
-
Marketing Teams who need to monitor competitor advertising strategies and creative approaches across multiple brands or pages
-
Agency Account Managers tracking client and competitor ad campaigns to inform strategy recommendations
-
Media Buyers staying current on industry trends and creative formats that drive performance
-
Brand Protection Specialists monitoring for unauthorized use of trademarks, logos, or brand assets in advertising
-
Market Research Analysts collecting advertising data for competitive analysis and market intelligence reports
-
Social Media Managers gathering inspiration and tracking how competitors position their products
Whether you're monitoring 5 pages or 50, this automation scales to meet your needs while maintaining accuracy and eliminating tedious manual work.
Required Integrations
Google Sheets
Why it's needed: Google Sheets serves as your central database for storing ad creative information and tracking which ads have already been processed to prevent duplicates.
Setup steps:
-
Create a Google Cloud Project
- Visit the Google Cloud Console
- Click "New Project" and give it a descriptive name like "TaskAGI Ad Monitoring"
- Wait for project creation to complete
-
Enable the Google Sheets API
- In your project, navigate to "APIs & Services" > "Library"
- Search for "Google Sheets API"
- Click "Enable"
-
Create Service Account Credentials
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "Service Account"
- Name it "TaskAGI Integration" and click "Create"
- Skip optional permissions and click "Done"
-
Generate and Download Key
- Click on your newly created service account
- Go to the "Keys" tab
- Click "Add Key" > "Create New Key"
- Select "JSON" format and click "Create"
- Save the downloaded JSON file securely
-
Configure in TaskAGI
- Navigate to Integrations in TaskAGI
- Select "Google Sheets"
- Upload your JSON credentials file or paste the contents
- Test the connection to verify setup
-
Prepare Your Tracking Sheet
- Create a new Google Sheet for ad tracking
- Add column headers:
Ad ID, Page Name, Ad Text, Image URL, Landing Page, First Seen Date
- Share the sheet with the service account email (found in your JSON file, looks like
name@project-id.iam.gserviceaccount.com)
- Grant "Editor" permissions
Telegram
Why it's needed: Telegram provides instant mobile notifications when new ads are discovered, ensuring your team can react quickly to competitive changes.
Setup steps:
-
Create a Telegram Bot
- Open Telegram and search for
@BotFather
- Send the command
/newbot
- Follow prompts to name your bot (e.g., "Ad Monitor Alerts")
- Save the Bot Token provided (format:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
-
Get Your Chat ID
- Search for
@userinfobot in Telegram
- Start a conversation to receive your Chat ID
- Alternatively, for group notifications, add your bot to a group and use
@getidsbot to find the group Chat ID
-
Configure in TaskAGI
- Go to Integrations > Telegram
- Enter your Bot Token
- Save and test the connection
Slack
Why it's needed: Slack integration ensures desktop notifications reach your team where they're already collaborating, with rich formatting for easy scanning.
Setup steps:
-
Create a Slack App
- Visit api.slack.com/apps
- Click "Create New App" > "From Scratch"
- Name it "Ad Monitor" and select your workspace
-
Configure Bot Permissions
- Navigate to "OAuth & Permissions"
- Under "Scopes" > "Bot Token Scopes", add:
-
chat:write (send messages)
-
chat:write.public (post to channels without joining)
-
Install to Workspace
- Click "Install to Workspace" at the top
- Review permissions and click "Allow"
- Copy the Bot User OAuth Token (starts with
xoxb-)
-
Configure in TaskAGI
- Navigate to Integrations > Slack
- Paste your Bot User OAuth Token
- Test the connection
-
Invite Bot to Channel
- In Slack, go to your desired notification channel
- Type
/invite @Ad Monitor to add the bot
Configuration Steps
Step 1: Schedule Trigger Setup
The Schedule Trigger node determines how frequently your workflow checks for new ads.
- Set
interval to your preferred frequency (recommended: 3600 for hourly checks, 86400 for daily)
- For competitive monitoring: hourly during business hours
- For general tracking: daily checks are sufficient
- Consider API rate limits when setting frequency
Step 2: Configuration Node
The Configuration node is your control center. Configure these critical parameters:
Search Type:
- Set
search_type to either "page_ids" or "keywords"
- Use
"page_ids" when monitoring specific advertiser pages (more precise)
- Use
"keywords" for broader industry monitoring
Search Parameters:
- For page_ids:
page_ids: ["123456789", "987654321"] (comma-separated list)
- For keywords:
keywords: ["running shoes", "athletic wear"]
API Configuration:
-
api_endpoint: Your ad library API URL (e.g., Meta Ad Library, Google Ads Transparency Center)
-
api_token: Your API authentication token
-
fields: Specify which ad data to retrieve: ["id", "page_name", "ad_creative_body", "ad_snapshot_url"]
Google Sheet URL:
-
sheet_url: Full URL of your tracking spreadsheet
- Example:
https://docs.google.com/spreadsheets/d/1ABC...XYZ/edit
Step 3: Read Existing IDs
The Read Existing IDs node pulls your current ad database to enable deduplication.
- Automatically uses
sheet_url from Configuration node
- Reads all rows from your tracking sheet
- No additional configuration needed
Step 4: Collect Existing IDs
The Collect Existing IDs function node processes the sheet data:
// Extracts Ad IDs into an array for comparison
const existingIds = items.map(item => item.json['Ad ID']);
return [{ json: { existing_ids: existingIds } }];
This creates a lookup list to identify new ads.
Step 5: Check Search Type
The Check Search Type conditional node routes the workflow:
- Condition:
{{$node["Configuration"].json["search_type"]}} === "page_ids"
-
True path → Fetch Ads by Page IDs
-
False path → Fetch Ads by Keywords
Step 6 & 7: Fetch Ads Nodes
Both HTTP Request nodes call the advertising API with different parameters:
For Page IDs:
- Method:
GET
- URL:
{{$node["Configuration"].json["api_endpoint"]}}/ads
- Query Parameters:
page_ids={{$node["Configuration"].json["page_ids"].join(",")}}
- Authentication: Bearer Token from Configuration
For Keywords:
- Method:
GET
- URL:
{{$node["Configuration"].json["api_endpoint"]}}/search
- Query Parameters:
q={{$node["Configuration"].json["keywords"].join(" OR ")}}
Step 8: Extract API Response
The Extract API Response function standardizes the API data:
// Transforms API response into consistent format
const ads = items[0].json.data.map(ad => ({
ad_id: ad.id,
page_name: ad.page_name,
ad_text: ad.ad_creative_body,
image_url: ad.ad_snapshot_url,
landing_page: ad.ad_creative_link_url,
first_seen: new Date().toISOString()
}));
return ads.map(ad => ({ json: ad }));
Step 9: Merge Data
The Merge Data node combines results from both search paths, ensuring the workflow continues regardless of which search type was used.
Step 10: Filter New Creatives
The Filter New Creatives function identifies truly new ads:
const existingIds = $node["Collect Existing IDs"].json["existing_ids"];
const newAds = items.filter(item => !existingIds.includes(item.json.ad_id));
return newAds;
Only ads not in your sheet proceed to the next step.
Step 11: Loop Over New Ads
The Loop node processes each new ad individually for sheet insertion.
- Automatically iterates through filtered ads
- Passes one ad at a time to the next node
Step 12: Add to Google Sheet
The Add to Google Sheet node appends each new ad:
- Uses
sheet_url from Configuration
- Maps fields:
Ad ID, Page Name, Ad Text, Image URL, Landing Page, First Seen Date
- Automatically formats data for your sheet structure
Step 13: Check If New Ads Found
The Check If New Ads Found conditional determines notification behavior:
- Condition:
{{$node["Filter New Creatives"].json.length}} > 0
-
True → Send notifications
-
False → Skip to No Operation node
Step 14 & 15: Send Notifications
Telegram Alert:
- Chat ID: Your saved Telegram Chat ID
- Message:
🚨 New Ads Detected!
Found {{$node["Filter New Creatives"].json.length}} new ad(s).
Check your tracking sheet: {{$node["Configuration"].json["sheet_url"]}}
Slack Alert:
- Channel: Your notification channel (e.g.,
#ad-monitoring)
- Message format: Similar to Telegram with rich formatting
Testing Your Agent
Initial Test Run
-
Manual Trigger Test
- Click "Execute Workflow" in TaskAGI
- Watch each node execute in sequence
- Green checkmarks indicate successful execution
-
Verify Data Flow
- Check Read Existing IDs output shows your sheet data
- Confirm Fetch Ads nodes return API results
- Verify Filter New Creatives identifies new ads correctly
-
Validate Sheet Updates
- Open your Google Sheet
- Confirm new rows appear with correct data
- Check formatting and column alignment
-
Test Notifications
- Verify Telegram message arrives on your device
- Check Slack channel for notification
- Confirm message content is clear and actionable
Success Indicators
✅ Green execution across all nodes
✅ New ads appear in Google Sheet with accurate data
✅ Notifications received in both Telegram and Slack
✅ No duplicate entries when re-running with same data
✅ Execution time completes within expected timeframe (typically 30-60 seconds)
Troubleshooting
Google Sheets Issues
Error: "Insufficient permissions"
-
Solution: Verify service account email has Editor access to your sheet
- Check the sharing settings in Google Sheets
- Ensure the sheet URL in Configuration is correct
Error: "Sheet not found"
-
Solution: Confirm the full sheet URL includes
/edit at the end
- Verify the sheet hasn't been deleted or moved
- Test the sheet URL in your browser while logged in
API Connection Problems
Error: "401 Unauthorized"
-
Solution: Verify your API token is current and valid
- Check if the token has expired and needs renewal
- Confirm the token has necessary permissions for ad data access
Error: "Rate limit exceeded"
-
Solution: Reduce schedule frequency (increase interval seconds)
- Implement exponential backoff in HTTP request settings
- Contact API provider about rate limit increases
Notification Failures
Telegram not receiving messages:
-
Solution: Verify Bot Token is correct
- Ensure Chat ID is accurate (try sending
/start to your bot)
- Check that bot isn't blocked by user or removed from group
Slack messages not appearing:
-
Solution: Confirm bot is invited to the target channel
- Verify OAuth token has
chat:write scope
- Check channel name includes
# prefix in configuration
Deduplication Not Working
Duplicate ads appearing in sheet:
-
Solution: Verify "Ad ID" column name matches exactly in your sheet
- Check that the Collect Existing IDs function is reading the correct column
- Ensure Ad IDs from API match format in your sheet (string vs. number)
Next Steps
After Successful Setup
-
Monitor for 48 hours to ensure stable operation and catch any edge cases
-
Review collected data to verify all desired fields are capturing correctly
-
Adjust schedule frequency based on your monitoring needs and API limits
-
Create a backup of your workflow configuration for disaster recovery
Optimization Suggestions
Enhance Data Collection:
- Add custom fields to track additional ad metadata (spend estimates, engagement metrics)
- Implement screenshot capture for visual ad archives
- Create separate sheets for different advertiser categories
Improve Notifications:
- Add conditional logic to only alert on high-priority advertisers
- Include ad preview images in notifications (requires additional processing)
- Create digest notifications (daily summary instead of per-ad alerts)
Scale Your Monitoring:
- Duplicate workflow for different product categories or regions
- Implement parallel processing for faster execution with large page lists
- Add data enrichment nodes to append competitor analysis
Advanced Usage Tips
Competitive Intelligence Dashboard:
- Connect your Google Sheet to Data Studio or Tableau for visualization
- Track trends in ad frequency, messaging themes, and creative formats
- Set up automated weekly reports summarizing new ad activity
Integration with Other Tools:
- Export data to your CRM to inform sales conversations
- Feed ad data into your marketing analytics platform
- Trigger creative brief workflows when competitors launch new campaigns
Compliance and Brand Safety:
- Add keyword filtering to flag potentially problematic ads
- Implement sentiment analysis on ad copy
- Create alerts for specific brand mentions or trademark usage
Your ad monitoring automation is now complete and ready to save your team countless hours while ensuring you never miss important competitive intelligence! 🚀