n8n workflow blueprint
Conference deadlines, collected every week and delivered on demand.
Collects upcoming conference deadlines every week and delivers them to the team by email and Telegram. Three linked workflows and 41 steps, with every source, filter, write and delivery mapped as one reference.
V1 · Oct 2026
See it run
A sample run through the workflows, step by step.
The three workflows
One pipeline that keeps the data clean, one that finds what is new, and one that answers the team.
| Workflow | Starts when | Branches on | Steps | Ends with |
|---|---|---|---|---|
| 01 Data ingestion | Schedule trigger Weekly run | None | 12 | Pipeline complete |
| 02 New events discovery | Schedule trigger Weekly · ahead of ingestion | None | 12 | Discovery complete |
| 03 Bot delivery | Telegram command received /topic · /region · /subscribe | Command type? CFP available? More batches? | 17 | Delivery complete Subscription saved |
Building blocks
Every workflow is assembled from the same small set of steps.
| Step | What it does | 1 | 2 | 3 | Total |
|---|---|---|---|---|---|
| Filter | Applies date-window logic to remove past and too-far-future events. | 2 | 2 | 2 | 6 |
| Transform | Formats, categorizes, and normalizes data · taxonomy mapping, null-safe dates. | 2 | 1 | 1 | 4 |
| Database write | Writes or upserts records to Supabase · upsert matched by event name. | 3 | 1 | · | 4 |
| End node | Terminal point · this workflow path is complete. | 1 | 1 | 2 | 4 |
| Trigger | Entry point · the scheduled or on-demand event that starts this workflow. | 1 | 1 | 1 | 3 |
| Deduplicate | Compares against the records already stored and removes events already present. | 1 | 1 | 1 | 3 |
| If / else | Splits the flow based on data conditions · CFP available vs TBA. | · | · | 3 | 3 |
| Data source | Fetches raw JSON from the GitHub conference data repository by category file. | 1 | 1 | · | 2 |
| API fetch | Calls the public events API and retrieves the full events dataset. | 1 | 1 | · | 2 |
| Database read | Reads all events from the events table for filtering and delivery. | · | 1 | 1 | 2 |
| Format | Builds paginated HTML or Telegram-formatted message strings per batch. | · | 1 | 1 | 2 |
| Email send | Sends the HTML digest email to the configured team recipients. | · | 1 | · | 1 |
| Subscription | Saves or updates the subscriber record in the subscriptions table. | · | · | 1 | 1 |
| Date convert | Converts human-readable dates to ISO format for reliable date comparison logic. | · | · | 1 | 1 |
| Merge | Combines multiple filter branches into a single unified event stream. | · | · | 1 | 1 |
| Telegram send | Delivers the formatted message to the user via the Telegram Bot API. | · | · | 1 | 1 |
| Wait | Pauses 2 seconds between batch messages to avoid Telegram rate limits. | · | · | 1 | 1 |
Triggers
What starts each workflow, and how a Telegram request is routed.
| Workflow | Trigger | Type | Fires when |
|---|---|---|---|
| Workflow 1 Data ingestion | Schedule trigger | Schedule | Weekly run |
| Workflow 2 New events discovery | Schedule trigger | Schedule | Weekly · ahead of ingestion |
| Workflow 3 Bot delivery | Telegram command received | Telegram command | /topic · /region · /subscribe |
How the bot routes a request, from Command type?
| Answer | Goes to | What it does |
|---|---|---|
| YES | Map category / region | Build isoDate window context |
| NO | Save subscription | Upsert to the subscriptions table |
Settings and limits
The fixed values that shape what each run does.
| Setting | Value | Set in |
|---|---|---|
| Run cadence | Weekly | Workflow 1 Schedule trigger |
| Run order | Discovery runs ahead of ingestion | Workflow 2 Schedule trigger |
| Date window, collection | Current period only, worked out on each run | Workflow 1 Date window · feed A |
| Date window, bot | Within 3 months. A CFP link must be open, or the event must be in the future when the deadline is TBA | Workflow 3 CFP path filter |
| Date format for comparing | ISO, YYYY-MM-DD | Workflow 3 Convert all dates to ISO |
| Write mode, ingestion | Upsert, matched by event name | Workflow 1 Write → events table |
| Write mode, discovery | Append only, after dropping events already stored | Workflow 2 Append new events |
| Duplicates, ingestion | Merged, with tags and topics combined across sources | Workflow 1 Merge duplicate events |
| Duplicates, bot | Matched by name, date and location | Workflow 3 Remove duplicates |
| Batch size | 20 events per message, HTML-formatted | Workflow 3 Build paginated message |
| Pause between batches | 2 seconds, to stay under the Telegram rate limit | Workflow 3 Wait 2 seconds |
| Digest recipients | A fixed team list, team only | Workflow 2 Send team digest email |
| Subscriptions | Saved to the subscriptions table, inserted or updated | Workflow 3 Save subscription |
Rules and filters
Every step that decides what stays, what goes and how records are cleaned.
| Workflow | Kind | Step | Rule |
|---|---|---|---|
| Workflow 1 | Filter | Date window · feed A | Dynamic: current period only |
| Workflow 1 | Filter | Date window · feed B | Dynamic: current period only |
| Workflow 1 | Transform | Format + categorize | Taxonomy normalization · null-safe |
| Workflow 1 | Transform | Convert timestamps | Normalize to common date format |
| Workflow 1 | Deduplicate | Merge duplicate events | Merge tags and topics across sources |
| Workflow 2 | Filter | Date window · feed A | Dynamic current period only |
| Workflow 2 | Filter | Date window · feed B | Dynamic current period only |
| Workflow 2 | Transform | Format + categorize | Taxonomy · null-safe · deduplicate |
| Workflow 2 | Deduplicate | Remove existing events | keepNonMatches · new events only |
| Workflow 3 | If / else | Command type? | Route by command received |
| Workflow 3 | Transform | Map category / region YES of Command type? | Build isoDate window context |
| Workflow 3 | If / else | CFP available? | Has CFP URL · deadline not TBA |
| Workflow 3 | Filter | CFP path filter YES of CFP available? | CFP open · within 3mo window |
| Workflow 3 | Filter | TBA path filter NO of CFP available? | Event future · within 3mo window |
| Workflow 3 | Deduplicate | Remove duplicates | Dedupe by name · date · location |
| Workflow 3 | If / else | More batches? | Loop until all pages delivered |
Data ingestion
PIPELINEScheduled refresh · pulls from external sources, formats and categorizes events, deduplicates, then upserts the datastore. The self-healing data layer.
Swipe sideways to see the whole flowchart
Read this workflow as a list
- Schedule trigger. Weekly run
- Fetch source feed A. Categorized data files fetched
- Fetch source feed B. Full dataset fetch
- Date window · feed A. Dynamic: current period only
- Date window · feed B. Dynamic: current period only
- Format + categorize. Taxonomy normalization · null-safe
- Convert timestamps. Normalize to common date format
- Merge duplicate events. Merge tags and topics across sources
- Write → events table. Upsert matched by name
- Write → feed A records. Upsert matched by name
- Write → feed B records. Upsert matched by name
- Pipeline complete. All records refreshed · CFP links live
New events discovery
DISCOVERYRuns ahead of the ingestion pipeline · finds only events not already stored, appends them, and emails an HTML digest to the team.
Swipe sideways to see the whole flowchart
Read this workflow as a list
- Schedule trigger. Weekly · ahead of ingestion
- Fetch source feed A. Categorized data files
- Fetch source feed B. Full dataset fetch
- Date window · feed A. Dynamic current period only
- Date window · feed B. Dynamic current period only
- Format + categorize. Taxonomy · null-safe · deduplicate
- Read existing records. Load current conferences for comparison
- Remove existing events. keepNonMatches · new events only
- Append new events. Append-only write
- Build HTML email digest. Topic-grouped cards with CFP links
- Send team digest email. Hardcoded recipients · team only
- Discovery complete. New events added · team notified
Bot delivery
DELIVERYOn-demand Telegram delivery · user sends a command, bot reads from the datastore, applies a date-window filter, and delivers paginated results. Also runs scheduled digests.
Swipe sideways to see the whole flowchart
Read this workflow as a list
- Telegram command received. /topic · /region · /subscribe
- Command type?. Route by command received
- Map category / region. Build isoDate window context
- Save subscription. Upsert to the subscriptions table
- Read events table. Full dataset · all events
- Subscription saved. User enrolled in scheduled digests
- Convert all dates to ISO. Human dates → YYYY-MM-DD for comparison
- CFP available?. Has CFP URL · deadline not TBA
- CFP path filter. CFP open · within 3mo window
- TBA path filter. Event future · within 3mo window
- Merge both paths. Combined event stream
- Remove duplicates. Dedupe by name · date · location
- Build paginated message. 20 events/batch · HTML-formatted
- Send batch to Telegram. Bot delivers to user chat ID
- Wait 2 seconds. Rate-limit buffer between batches
- More batches?. Loop until all pages delivered
- Delivery complete. All batches sent · user notified
Want something like this?
Tell me about the process you want off your plate. The brief takes about three minutes, and the project is priced before I start.
Start a BriefOpen the animated, interactive version of this diagram →
Shown at a high level. Real records, internal methods and anything confidential are left out.