Explore practical workflow examples that demonstrate how to integrate Falconyte with n8n and other services. Each example includes a complete workflow description and configuration guidance.
Use Case: Automatically sync new contacts from your CRM to Falconyte.
Workflow:
Webhook Trigger (CRM)
→ Function: Transform Data
→ Falconyte: Upsert Contact
→ IF: Success?
→ True: Update CRM Record
→ False: Send Error to Slack
Configuration:
- Webhook Trigger: Configure your CRM to send new contact events to n8n
- Function Node: Transform CRM data to Falconyte format
return {
email: $json.email_address,
first_name: $json.given_name,
last_name: $json.family_name,
phone: $json.phone_number,
foreign_id: $json.crm_id,
custom_fields: {
custom_str_1: $json.company,
custom_str_2: $json.job_title,
custom_int_1: $json.deal_value
},
tags: ['crm-import', $json.lead_source]
};
- Falconyte Action: Upsert Contact
- IF Node: Check
{{ $json.ok === true }}
- Update CRM: Mark contact as synced in your CRM
- Slack Alert: Notify team on failures
Benefits:
- Bi-directional sync between systems
- Automatic contact enrichment
- Error visibility
Example 2: Event-Driven Lead Scoring
Use Case: Automatically track engagement and score leads based on email interactions.
Workflow:
Falconyte Trigger (email.opened, email.clicked)
→ Switch: Event Type
→ email.opened: +5 points
→ email.clicked: +10 points
→ HTTP Request: Update Lead Score in Database
→ IF: Score > 50
→ Falconyte: Submit Event (lead.created)
→ Falconyte: Upsert Contact (add "hot-lead" tag)
→ Slack: Notify Sales Team
Configuration:
- Falconyte Trigger: Subscribe to
email.opened and email.clicked
- Switch Node: Route by event type
- Set Node: Calculate points
{
"contact_id": "{{ $json.payload.contact_id }}",
"email": "{{ $json.payload.email }}",
"points": {{ $json.event === 'email.clicked' ? 10 : 5 }}
}
- HTTP Request: Update your database
- IF Node: Check if score exceeds threshold
- Falconyte Actions: Mark as lead and tag appropriately
- Slack: Alert sales team with contact details
Benefits:
- Real-time lead qualification
- Automated sales notifications
- Data-driven scoring
Example 3: Automated Welcome Series
Use Case: Trigger a multi-step email sequence when a new contact is added.
Workflow:
Falconyte Trigger (email.contact.saved)
→ IF: is_new = true
→ Wait: 5 minutes
→ Falconyte: Send Email (Welcome #1)
→ Wait: 2 days
→ Falconyte: Send Email (Welcome #2)
→ Wait: 5 days
→ Falconyte: Send Email (Welcome #3)
Configuration:
- Falconyte Trigger: Subscribe to
email.contact.saved
- IF Node: Filter for newly created contacts only
{{ $json.payload.is_new === true }}
- Wait Nodes: Add delays between emails
- Falconyte Email Actions: Send each email in sequence
{
"to": "{{ $json.payload.email }}",
"template_id": "welcome-email-1-uuid",
"template_variables": {
"first_name": "{{ $json.payload.first_name }}"
}
}
The is_new field is automatically set by Falconyte when a contact is created vs. updated. This is more reliable than tag-based filtering since it doesn’t require manual tagging.
Advanced Version: Add engagement tracking
+ Falconyte Trigger (email.clicked)
→ IF: Link = "Get Started"
→ Stop Welcome Series
→ Start Onboarding Series
Benefits:
- Personalized onboarding
- Timed email sequences
- Conditional logic based on engagement
Example 4: Bounce Management
Use Case: Automatically handle bounced emails and clean your contact list.
Workflow:
Falconyte Trigger (email.bounced.hard)
→ Falconyte: Upsert Contact (add "bounced" tag)
→ HTTP Request: Mark Invalid in Database
→ Google Sheets: Log Bounced Email
→ IF: Bounce Category = "invalid_address"
→ Falconyte: Unsubscribe Contact
Configuration:
- Falconyte Trigger: Subscribe to
email.bounced.hard and email.bounced.soft
- Falconyte Action: Tag contact
{
"email": "{{ $json.payload.email }}",
"tags": ["bounced", "{{ $json.payload.bounce_category }}"]
}
- HTTP Request: Update your system
- Google Sheets: Log for audit trail
- IF Node: Check bounce type
{{ $json.payload.bounce_category === 'invalid_address' }}
- Falconyte Action: Unsubscribe if hard bounce
Benefits:
- Improved deliverability
- Automatic list hygiene
- Audit trail for compliance
Example 5: Multi-Channel Notification
Use Case: Send notifications via multiple channels when important events occur.
Workflow:
Falconyte Trigger (email.sale.created)
→ Set: Extract Sale Data
→ Parallel Branches:
→ Branch 1: Slack Notification
→ Branch 2: Discord Notification
→ Branch 3: Email to Sales Team
→ Branch 4: Update Google Sheets
→ Branch 5: Log to Database
Configuration:
- Falconyte Trigger: Subscribe to
email.sale.created
- Set Node: Prepare data
{
"contact_id": "{{ $json.payload.contact_id }}",
"email": "{{ $json.payload.email }}",
"amount": {{ $json.payload.amount }},
"currency": "{{ $json.payload.currency }}",
"timestamp": "{{ $json.timestamp }}"
}
- Multiple Branches: Use n8n’s parallel execution
- Slack: Format rich message with sale details
- Discord: Post to sales channel
- Email: Send summary to manager
- Google Sheets: Add row with sale data
- Database: Log for analytics
Benefits:
- Real-time visibility across tools
- No missed notifications
- Centralized logging
Use Case: When someone unsubscribes, remove them from all your marketing tools.
Workflow:
Falconyte Trigger (email.contact.unsubscribed)
→ Parallel Branches:
→ Branch 1: Mailchimp - Unsubscribe
→ Branch 2: HubSpot - Update Contact
→ Branch 3: Salesforce - Mark Opted Out
→ Branch 4: Internal Database - Update Status
→ Branch 5: Google Sheets - Log Unsubscribe
Configuration:
- Falconyte Trigger: Subscribe to
email.contact.unsubscribed
- Extract Data: Get email and reason
- Mailchimp API: Remove from lists
- HubSpot API: Update contact properties
- Salesforce API: Update opt-out status
- Database Update: Mark in your system
- Google Sheets: Log for compliance
Benefits:
- GDPR/CAN-SPAM compliance
- Consistent opt-out status
- Audit trail
Example 7: Bot Activity Analysis
Use Case: Track and analyze bot activity separately from human engagement.
Workflow:
Falconyte Trigger (email.bot.opened, email.bot.clicked)
→ Set: Extract Bot Data
→ HTTP Request: Log to Analytics Database
→ IF: Bot Score > 0.9
→ Google Sheets: Flag for Review
→ Airtable: Add to Bot Patterns Table
Configuration:
- Falconyte Trigger: Subscribe to
email.bot.opened and email.bot.clicked
- Set Node: Extract analysis data
{
"event": "{{ $json.event }}",
"email": "{{ $json.payload.email }}",
"bot_score": {{ $json.payload.decision.bot_score }},
"reasons": {{ JSON.stringify($json.payload.decision.reasons) }},
"user_agent": "{{ $json.payload.user_agent }}",
"ip_address": "{{ $json.payload.ip_address }}"
}
- Database: Store for pattern analysis
- IF Node: Flag high-confidence bots
- Airtable: Build bot pattern database
Benefits:
- Accurate engagement metrics
- Bot pattern recognition
- Data quality improvement
Example 8: Webhook Delivery Monitoring
Use Case: Monitor webhook health and alert on failures.
Workflow:
Cron Trigger (Every 15 minutes)
→ Falconyte: List Webhooks
→ Loop: For Each Webhook
→ Falconyte: Get Deliveries (last 15 min)
→ Function: Count Failures
→ IF: Failure Rate > 10%
→ Slack: Alert Team
→ PagerDuty: Create Incident
Configuration:
- Cron Trigger: Run every 15 minutes
- Falconyte Action: List all webhooks
- Loop Node: Iterate through webhooks
- Falconyte Action: Get recent deliveries with filter
{
"query": {
"condition": "AND",
"type": "builder",
"rules": [
{
"column": "status",
"operator": "equals",
"value": "failed"
},
{
"column": "created_at",
"operator": "greater_than",
"value": "{{ $now.minus({minutes: 15}).toISO() }}"
}
]
}
}
- Function: Calculate failure rate
- IF Node: Check threshold
- Alerts: Notify appropriate channels
Benefits:
- Proactive issue detection
- Reduced downtime
- SLA compliance
Example 9: Dynamic List Segmentation
Use Case: Automatically segment contacts into lists based on behavior.
Workflow:
Falconyte Trigger (email.clicked)
→ IF: URL Contains
→ "pricing": Add "interested-in-purchase" tag
→ "blog": Add "content-reader" tag
→ "demo": Add "demo-interested" tag + Submit lead.created event
→ Falconyte: Upsert Contact (apply tags)
→ HTTP Request: Update Segment in External Tool
Configuration:
- Falconyte Trigger: Subscribe to
email.clicked
- Switch Node: Route by URL pattern
- Set Nodes: Define tags for each segment
- Falconyte Actions: Apply tags and submit events
- External Tools: Sync segments to CRM/analytics
Benefits:
- Behavioral segmentation
- Automatic list management
- Personalized follow-ups
Use Case: Enrich new contacts with data from multiple sources.
Workflow:
Falconyte Trigger (email.contact.saved)
→ IF: is_new = true
→ Clearbit: Enrich Contact
→ Hunter.io: Verify Email
→ FullContact: Get Social Profiles
→ Function: Merge All Data
→ Falconyte: Upsert Contact (with enriched data)
→ IF: Company Size > 50
→ Falconyte: Add "enterprise" tag
→ Slack: Notify Enterprise Team
Configuration:
- Falconyte Trigger: Subscribe to
email.contact.saved
- IF Node: Filter for newly created contacts only
{{ $json.payload.is_new === true }}
- Clearbit API: Get company and role data
- Hunter.io API: Verify email deliverability
- FullContact API: Get social media profiles
- Function Node: Merge all enrichment data
return {
email: $json.payload.email,
custom_fields: {
custom_str_1: $node["Clearbit"].json.company_name,
custom_str_2: $node["Clearbit"].json.role,
custom_int_1: $node["Clearbit"].json.company_size,
custom_str_3: $node["FullContact"].json.linkedin_url
},
tags: [
$node["Hunter"].json.deliverable ? 'verified-email' : 'unverified-email',
$node["Clearbit"].json.industry
]
};
- Falconyte Action: Update contact with enriched data
- Conditional Logic: Route based on enrichment results
Only enriching new contacts (using is_new = true) prevents redundant API calls to enrichment services when existing contacts are updated. This saves costs and improves performance.
Benefits:
- Automated data enrichment
- Better lead qualification
- Personalization at scale
Example 11: Revenue Attribution
Use Case: Track revenue attribution from email campaigns to sales.
Workflow:
Falconyte Trigger (email.sale.created)
→ Function: Extract Campaign Data
→ PostgreSQL: Insert Sale Record
→ HTTP Request: Get Campaign Details
→ Google Analytics: Track Conversion
→ Data Studio: Update Dashboard
→ IF: Amount > 1000
→ Slack: Notify Leadership
Configuration:
- Falconyte Trigger: Subscribe to
email.sale.created
- Function: Prepare attribution data
return {
sale_id: $json.payload.sale_id,
contact_id: $json.payload.contact_id,
email: $json.payload.email,
amount: $json.payload.amount,
currency: $json.payload.currency,
campaign_id: $json.payload.campaign_id,
campaign_send_id: $json.payload.campaign_send_id,
source: $json.payload.source,
timestamp: $json.timestamp
};
- Database: Store for reporting
- Campaign API: Fetch campaign metadata
- Analytics: Track conversion event
- Dashboards: Update real-time reports
- Notifications: Alert on high-value sales
Benefits:
- Clear ROI visibility
- Campaign performance tracking
- Data-driven optimization
Use Case: Import contacts from a CSV file or external database.
Workflow:
Schedule Trigger (Daily at 3 AM)
→ Google Sheets: Read New Contacts
→ Function: Batch into Groups of 1000
→ Loop: For Each Batch
→ Falconyte: Bulk Upsert Contacts
→ Wait: 1 second (rate limiting)
→ Function: Count Results
→ Slack: Send Import Summary
Configuration:
- Schedule Trigger: Run during off-peak hours
- Google Sheets: Read rows where
imported = false
- Function Node: Batch contacts
const contacts = $json.map(row => ({
email: row.email,
first_name: row.first_name,
last_name: row.last_name,
phone: row.phone,
custom_fields: {
custom_str_1: row.company,
custom_str_2: row.source
}
}));
// Split into batches of 1000
const batches = [];
for (let i = 0; i < contacts.length; i += 1000) {
batches.push(contacts.slice(i, i + 1000));
}
return batches.map(batch => ({ contacts: batch }));
- Loop Node: Process each batch
- Falconyte Action: Bulk Upsert
- Wait Node: Respect rate limits
- Summary: Report success/failure counts
Benefits:
- Efficient bulk operations
- Rate limit management
- Progress tracking
Tips for Building Workflows
1. Error Handling
Always include error handling:
Any Node
→ Error Trigger
→ Function: Log Error Details
→ Slack/Email: Notify Team
→ Database: Store for Analysis
2. Testing
Test workflows incrementally:
- Start with Manual Trigger
- Test each node individually
- Use Execute Node to debug specific steps
- Check n8n execution logs
3. Data Validation
Validate data before sending to Falconyte:
// In a Function node
const email = $json.email;
// Validate email format
if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
throw new Error(`Invalid email: ${email}`);
}
// Validate required fields
if (!$json.first_name) {
$json.first_name = 'Unknown';
}
return $json;
4. Idempotency
Prevent duplicate operations:
// Generate unique key
const idempotencyKey = `${$json.event_type}-${$json.user_id}-${$json.timestamp}`;
// Check if already processed
const exists = await checkDatabase(idempotencyKey);
if (exists) {
return []; // Skip
}
// Continue processing...
5. Logging
Add logging nodes for debugging:
Any Node
→ Function: Log to Console
→ Supabase/Airtable: Store Log Entry
Optimize for speed:
- Use Respond to Webhook early in trigger workflows
- Process heavy operations asynchronously
- Batch operations when possible
- Use parallel branches for independent tasks
Next Steps
Need Help?
Have a workflow idea but not sure how to implement it?