UGC Submission Webhook
Receive and process user-generated content submissions via webhook endpoint
Instructions
UGC Submission Webhook
Receive user-generated content submissions (tutorials, reviews, templates, use cases) from in-product forms, email replies, or third-party platforms and route them into a processing pipeline.
n8n Webhook Setup
Create an n8n webhook node that accepts POST requests with content submissions.
Endpoint: POST /webhook/ugc-submission
Expected payload:
{
"submitter_email": "user@example.com",
"submitter_name": "Jane Doe",
"content_type": "tutorial|review|template|use_case|video|blog_post",
"title": "How I automated my weekly reports with [Product]",
"content_url": "https://...",
"content_body": "Full text if inline submission",
"platform": "in_product|email|twitter|linkedin|blog|youtube|github",
"tags": ["automation", "reporting"],
"submitted_at": "2026-03-30T12:00:00Z"
}
n8n workflow steps:
- Webhook trigger — receives the submission
- Validation node — check required fields:
submitter_email,content_type, at least one ofcontent_urlorcontent_body. Reject with 400 if missing. - Deduplication node — query Attio or a storage table to check if this URL or content body hash was already submitted. Skip duplicates.
- Enrichment node — look up the submitter in Attio CRM to get their account, plan tier, power user score, and advocacy tier. Attach as metadata.
- PostHog event node — fire
ugc_submittedevent with properties:{ "content_type": "tutorial", "platform": "blog", "submitter_tier": "pro", "power_user_score": 72, "advocacy_tier": "insider" } - Storage node — create an Attio note or record with the submission details, status
pending_review, and a link to the content. - Response — return 200 with
{ "status": "received", "submission_id": "..." }
Integration Points
In-product submission form: Build a simple form (Intercom custom bot or in-app modal) that POSTs to this webhook. Fields: content type dropdown, title, URL or text body, optional tags.
Email-based submissions: Configure an n8n email trigger on a dedicated address (e.g., ugc@yourproduct.com) that parses the email body and POSTs to this webhook.
Social monitoring: When the community-monitoring-automation drill or slack-discord-monitoring-automation drill detects a user sharing product content, it POSTs the discovered content to this webhook with platform set to the source.
Authentication
Use a shared secret header (X-UGC-Webhook-Secret) for requests from external sources. In-product submissions authenticate via the user's session. n8n validates the secret before processing.
Error Handling
- Invalid payload: return 400 with specific field errors
- Duplicate submission: return 200 with
{ "status": "duplicate", "original_id": "..." } - Attio lookup failure: proceed without enrichment, flag for manual enrichment later
- PostHog event failure: log the error, do not block the submission pipeline
Tool Alternatives
| Tool | Purpose | Notes | |------|---------|-------| | n8n | Primary webhook + workflow | Self-hosted or cloud | | Zapier | Alternative webhook handler | Webhook trigger on paid plans | | Make (Integromat) | Alternative workflow | HTTP module for webhooks | | Pipedream | Alternative webhook | Built-in webhook triggers, code steps | | Tray.io | Enterprise alternative | For larger-scale UGC processing |