Guide: Content Ingestion Pipeline
Build a content ingestion pipeline that automatically collects newsletter content from Slack, Notion, Google Docs, HRIS, and GitHub into your content library.
Stop chasing people for content. Build a pipeline that collects newsletter material from your existing tools automatically.
The problem
The biggest time sink in internal newsletters isn't writing — it's collecting. You Slack people, send reminder emails, and still get updates at the last minute. A content ingestion pipeline solves this by meeting content where it already lives.
Architecture
Slack ──────┐
Notion ─────┤
HRIS ───────┤──→ Webhook Ingest ──→ Content Library ──→ Newsletter
GitHub ─────┤ (API) (draft blocks) (assembly)
Google ─────┘
Each source pushes content to your Internal Newsletter content library via the webhook ingest endpoint. Content arrives as draft blocks. The comms lead reviews, edits, and includes what's relevant.
Setting up sources
Slack
See the Slack integration guide for three approaches — from no-code Zapier to a custom Slack bot.
Best trigger: Emoji reaction (e.g. :newspaper:) on messages in #company-updates.
HRIS (BambooHR, Rippling, HiBob)
See the HRIS integration guide for connecting your HR system.
Best triggers: New hire, work anniversary, promotion.
Notion
Use the Notion API to watch for pages tagged "newsletter":
- Query the Notion API for pages in your "Company Updates" database
- Filter for pages with a "Newsletter" tag added since last check
- Extract title and body content
- POST to
/api/v1/webhooks/ingest
GitHub / Linear
When a release is published:
- GitHub Actions workflow triggers on
release.published - Formats the changelog as HTML
- POSTs to ingest with
block_type: "wins_milestones"
Google Forms
Replace your "submit newsletter content" email with a Google Form:
- Create a form with Title, Content, and Type fields
- Use Zapier/Make to forward responses to the ingest endpoint
- Employees submit content via a friendly form, it lands in your library
Managing the pipeline
Filtering by source
Use the API to see what came from where:
# All webhook-ingested content (needs review)
curl "$BASE_URL/content_blocks?source=webhook"
# All agent-created content
curl "$BASE_URL/content_blocks?source=agent"
# All employee submissions
curl "$BASE_URL/content_blocks?source=submission"
Review workflow
- Content arrives as
draftblocks from various sources - Comms lead reviews in the UI — edits, adds images, adjusts tone
- Marks good blocks as
ready - Ready blocks are available for newsletter assembly
This keeps the human in the loop while eliminating the collection burden.