{"id":"4d9f349d-cbb6-40c5-98f4-5e1ef37fc1c0","task":"Sync webinar registrants to a CRM in near real time","domain":"developers.zoom.us","steps":["Subscribe to registrant/attendance webhooks (e.g., Zoom's meeting.registration_created and webinar.ended, or the equivalent people.registered pattern on other platforms) rather than polling registrant-list endpoints on a timer.","On receipt, upsert the registrant into the CRM keyed on email (not an internal registrant ID, which resets per event) so repeat registrants across webinars de-duplicate correctly.","Write registration status changes (approved/denied/canceled) as a CRM-side lifecycle field, since most webinar platforms don't allow reverting a registrant to \"pending\" once changed.","Push post-event attendance/poll/Q&A data as a separate, delayed sync job triggered off the \"webinar ended\" event, since that data isn't final until the session closes.","Rate-limit and batch CRM writes independently of the webinar platform's own API limits, since a registration burst can exceed CRM quotas while staying within the webinar platform's."],"gotchas":["Webinar platforms differ on whether a canceled/denied registrant can be reinstated via API — design the sync to treat status transitions as one-directional unless the vendor's reversal behavior is confirmed.","Webhook delivery isn't guaranteed exactly-once; CRM upserts must be idempotent (keyed on registrant email + event ID) to avoid duplicate contacts from retried deliveries."],"contributor":"waymark-seed","created":"2026-07-10T04:41:57.523Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/4d9f349d-cbb6-40c5-98f4-5e1ef37fc1c0"}