Zapier
Start Zaps from replies, sends, opens, clicks, bounces, unsubscribes, completed campaigns and new contacts, and create contacts, tag them, add them to lists and campaigns from any app.
The SendCanyon Zapier app connects with a SendCanyon API key. Triggers are instant: when you turn a Zap on, Zapier subscribes a webhook, and SendCanyon posts each event to it as it happens. When you turn the Zap off, Zapier removes the webhook.
Connecting
In SendCanyon, open Settings → API keys and create a key (for example "Zapier"). Copy it when it is shown, because it is shown once. It starts with
sc_.In Zapier, create a Zap and choose SendCanyon as the trigger or action app.
When Zapier asks you to sign in, paste the key into API key. The connection is named after your SendCanyon workspace.
Turn the Zap on. It appears under Settings → Integrations → Zapier → Active hooks.
A Zap only receives events from the workspace its key belongs to. Revoking the key under Settings → API keys stops every Zap subscribed with it straight away.
Triggers
| Trigger | Fires when |
|---|---|
| New Reply | A contact replies to a campaign email and SendCanyon matches the reply |
| Email Sent | A campaign email is sent |
| Email Opened | A contact opens a campaign email (tracking must be on) |
| Link Clicked | A contact clicks a tracked link |
| Email Bounced | A campaign email bounces |
| Contact Unsubscribed | A contact unsubscribes |
| Campaign Completed | Every message in a campaign has been sent, failed or canceled |
| New Contact | A contact is created: added by hand, through the API or Zapier, or by a CSV import |
Every trigger except New Contact has an optional Campaign field that limits it to one campaign. When you test a trigger in Zapier, SendCanyon returns your most recent real event of that kind. If you have none yet, it returns a sample with the same fields.
Fields every trigger sends
{
"id": "5f0c1d2e-…",
"event": "email.replied",
"occurred_at": "2026-09-28T10:00:00.000Z",
"workspace_id": "…",
"contact_id": "…",
"email": "[email protected]",
"first_name": "Dana",
"last_name": "Lee",
"company": "Example Co",
"campaign_id": "…",
"campaign_name": "Q4 outbound",
"campaign_status": "active",
"message_id": "…",
"step_number": 1,
"variant_name": "A",
"subject": "Re: Quick question",
"reply_snippet": "Thanks for reaching out — can we talk Thursday?",
"link_url": null,
"bounce_type": null,
"conversation_url": "https://app.sendcanyon.com/dashboard/inbox?conversation=…",
"campaign_url": "https://app.sendcanyon.com/dashboard/campaigns/…?tab=stats"
}ididentifies the event and stays the same if a delivery is retried. It is also sent as thex-sendcanyon-deliveryheader, and the event name asx-sendcanyon-event.reply_snippetis filled for replies,link_urlfor clicks, andbounce_typefor bounces. Otherwise they arenull.- Campaign triggers carry the campaign fields, and their contact fields are
null. New Contact carries the contact fields, and its campaign fields arenull.
Actions
| Action | Fields | What it does |
|---|---|---|
| Create or Update Contact | Email (required), First name, Last name, Company, Job title, Time zone, Custom fields | Creates the contact, or updates the one with that email. Only the fields you map are changed, and custom fields are merged, so any you leave out are kept. It never changes whether a contact can be emailed |
| Add Contact to List | List, Email, First name, Last name | Creates the contact if needed and adds it to the list |
| Add Tag to Contact | Tag, Email | Creates the contact if needed and tags it |
| Remove Tag from Contact | Tag, Email | Removes the tag. Fails if there is no contact with that email |
| Add Contact to Campaign | Campaign, Email, First name, Last name, Company | Creates the contact if needed and adds it to the campaign's audience. A running campaign schedules the contact within a few minutes; a draft or paused campaign sends when it is launched or resumed. Refused if the contact is on the suppression list, has bounced, unsubscribed or replied, or is excluded by the campaign's audience rules |
| Pause Campaign | Campaign | Pauses a running campaign |
| Resume Campaign | Campaign | Resumes a paused or completed campaign with its saved audience, as the Resume button in the app does |
| Unsubscribe Contact | Email, Reason | Adds the email to the suppression list, so nothing more is sent to it |
Searches
- Find Contact: by exact email address, ignoring case.
- Find Campaign: by name. An exact name match is returned first.
Testing
In SendCanyon, Settings → Integrations → Zapier → Send sample to all hooks posts a sample event to every active hook and shows which ones failed. Each hook also shows its last delivery result, e.g. Delivered 200 or Failed 500.
Delivery and retries
- Events are delivered from a background queue, so a slow Zap never delays sending.
- A failed delivery (
5xx,408,429or no answer) is retried up to 8 times with increasing delays. A429waits for theRetry-Aftertime. Other4xxanswers are not retried. - If Zapier answers
410 Gone(the Zap was deleted), SendCanyon removes the hook at once.
Troubleshooting
| What you see | What it means | What to do |
|---|---|---|
| Zapier says the API key is invalid or revoked | The key was revoked, expired or mistyped | Create a new key and reconnect the account in Zapier |
| plan_feature_unavailable | The workspace's plan does not include integrations | Upgrade to Pro |
| contact_not_eligible on Add Contact to Campaign | The contact is suppressed, bounced, unsubscribed, replied, or excluded by the campaign | The error names the reason. Nothing is added |
| invalid_status on Pause or Resume | Only a running campaign can be paused, and only a paused or completed one resumed | Check the campaign's status |
| A hook shows Failed or Unreachable | Zapier did not accept the last delivery | Check the Zap's history in Zapier. The next event retries |
| A Zap no longer fires | The Zap was turned off, deleted, or its API key revoked | Turn the Zap on again, or reconnect with a live key |
Disconnecting
Turning a Zap off unsubscribes its hook. To stop one hook from SendCanyon, delete it under Active hooks; its Zap then receives nothing more. Revoking the API key stops every Zap connected with it.
Was this page helpful?
Related articles
- HubSpotConnect HubSpot with a private app token, import lists with a field mapping, log sends and replies on the contact, and keep unsubscribes in step both ways.Integrations
- SlackPost replies, bounces, unsubscribes, campaign updates and a daily digest to Slack channels through incoming webhooks.Integrations
- Quick start: zero to first campaignThe six steps between creating a workspace and launching your first sequence, and how long each one really takes.Getting Started