Customer Onboarding
Automate new customer setup across multiple systems
Customer Onboarding Tutorial
Learn how to automate new customer onboarding across multiple systems when a Stripe subscription is created, ensuring consistent setup and immediate engagement.
The Problem
When a new customer signs up, teams typically:
- Manually create the customer in the accounting system (QuickBooks/NetSuite)
- Add the contact to the CRM (HubSpot/Salesforce)
- Send a welcome email with setup instructions
- Notify the customer success team in Slack
- Create onboarding tasks or projects
- Update spreadsheets or dashboards
This manual process causes:
- Delayed onboarding - Hours or days before customer is fully set up
- Inconsistent data - Customer info varies across systems
- Missed steps - Someone forgets to update a system
- Poor first impression - Customer waits for manual actions
- Team bottlenecks - One person becomes the onboarding gatekeeper
The Solution
Build a workflow that automatically:
- Triggers when a Stripe subscription is created
- Creates the customer in QuickBooks for invoicing
- Creates or updates the contact in HubSpot as a customer
- Sends a personalized welcome email
- Notifies the customer success team in Slack
- (Optional) Creates an onboarding project or task
What You'll Build
Prerequisites
Required Connections
| Provider | Connection Type | Purpose |
|---|---|---|
| Stripe | OAuth via Nango | Receive webhooks, get customer data |
| QuickBooks | OAuth via Nango | Create accounting customers |
| HubSpot | OAuth via Nango | Manage CRM contacts |
| Slack | OAuth via Nango | Team notifications |
| Email Provider | OAuth or API Key | Welcome emails |
Stripe Setup
-
Configure Webhook in Stripe Dashboard:
- Developers → Webhooks → Add endpoint
- URL:
https://your-domain.com/webhooks/stripe/{companyId} - Events:
customer.subscription.created
-
Note your webhook signing secret for verification
QuickBooks Setup
Ensure you have:
- An active QuickBooks Online account
- OAuth connection configured in Nango
HubSpot Setup
- Create Custom Properties (recommended):
stripe_customer_id(Single-line text)stripe_subscription_id(Single-line text)subscription_plan(Dropdown)mrr(Number - currency)
Step-by-Step Implementation
Step 1: Create the Workflow
Start with the Stripe webhook trigger:
Step 2: Extract Customer Information
Parse the subscription data:
Step 3: Get Full Customer Details from Stripe
Retrieve the complete customer profile:
Output includes:
name- Customer nameemail- Email addressphone- Phone number (if provided)address- Billing addressmetadata- Custom fields
Step 4: Create QuickBooks Customer
Create the customer in your accounting system:
Step 5: Create or Update HubSpot Contact
Add the customer to your CRM:
Key properties:
lifecyclestage: customer- Marks them as a paying customer- Custom Stripe fields for tracking
Step 6: Send Welcome Email
Send a personalized welcome email:
Step 7: Notify Customer Success Team
Alert the team about the new customer:
Complete Workflow
Here's the complete workflow JSON:
Testing
1. Create Test Workflow
2. Activate Workflow
3. Test with Simulated Webhook
4. Verify Results
| System | What to Verify |
|---|---|
| QuickBooks | New customer created with Stripe ID in notes |
| HubSpot | Contact created with lifecycle stage = customer |
| Welcome email received | |
| Slack | Notification in #new-customers |
5. End-to-End Test
- Create a test product and price in Stripe
- Use Stripe test mode to create a subscription
- Watch the workflow execute automatically
- Verify all systems updated
Error Handling
Graceful Degradation
The workflow uses onError: { action: "continue" } for non-critical steps so the workflow continues even if one system fails:
Notify on Partial Failure
Add a check at the end:
Handle Duplicate Customers
Check if customer already exists:
Variations and Extensions
Plan-Specific Onboarding
Different onboarding flows for different plans:
Create NetSuite Customer Instead
For enterprise companies using NetSuite:
Scheduled Follow-up Email
Send a check-in email 7 days after signup:
Create Salesforce Account and Contact
For Salesforce users:
Assign CSM Based on Plan
Route high-value customers to senior CSMs:
Trial Conversion Variant
Handle trial-to-paid conversion differently:
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| Duplicate customers | Same webhook fired twice | Add idempotency check with subscription ID |
| Missing customer name | Stripe customer has no name | Fall back to email prefix |
| QuickBooks sync failed | Customer already exists | Check before create, update instead |
| Email not sent | Invalid email format | Validate email in transform step |
| Wrong plan amount | Amount is in cents | Divide by 100 for display |