Managing logistics bookings manually kills your growth potential. Every booking requires data entry, carrier assignment, payment tracking, and customer notifications. This workflow automates the entire booking pipeline from customer submission to carrier assignment and payment processing. You'll learn how to build a complete booking system that handles auto transport, repo forwarding, and pet transport using n8n's automation capabilities.
The Problem: Manual Booking Processes Cost Time and Revenue
Current challenges:
- Manual data entry for every booking creates bottlenecks and errors
- Tracking bookings across spreadsheets leads to lost information
- Customers wait hours for booking confirmations instead of getting instant responses
- Payment processing requires manual invoice creation and follow-up
- Carrier assignment happens through phone calls and email chains
- No centralized system to view booking status or revenue metrics
Business impact:
- Time spent: 15-20 hours per week on booking administration
- Error rate: 8-12% of bookings contain incorrect pickup/dropoff details
- Customer satisfaction: Delayed confirmations reduce conversion by 23%
- Revenue leakage: Manual payment tracking results in 5-7% uncollected invoices
The Solution Overview
This n8n workflow creates a complete booking management system that captures customer submissions through web forms, stores data in Airtable, processes payments via Stripe, and sends automated notifications. The system handles three service types (auto transport, repo forwarding, pet transport) through a single unified workflow. You'll use webhook triggers for form submissions, Airtable for database management, Stripe for payment processing, and email/SMS nodes for customer communications. The workflow processes bookings in real-time and provides admins with a dashboard view of all active bookings.
What You'll Build
| Component | Technology | Purpose |
|---|---|---|
| Booking Form | Webhook Trigger | Capture customer pickup/dropoff, vehicle/pet info, contact details |
| Database | Airtable | Store bookings, carrier assignments, payment status |
| Payment Processing | Stripe API | Create invoices, process payments, track revenue |
| Notifications | Email/SMS Nodes | Send booking confirmations, carrier assignments, payment receipts |
| Admin Dashboard | Airtable Interface | View all bookings, assign carriers manually, track status |
| Data Validation | Function Nodes | Verify required fields, format phone numbers, calculate pricing |
Key capabilities:
- Accept bookings 24/7 without manual intervention
- Automatically validate customer data and calculate transport quotes
- Process payments and send receipts instantly
- Notify customers and carriers via email or SMS
- Provide admins with real-time booking visibility
- Track booking status from submission to completion
- Generate documentation for maintenance and expansion
Prerequisites
Before starting, ensure you have:
- n8n instance (cloud or self-hosted)
- Airtable account with API access
- Stripe account with API keys (test mode for development)
- Email service credentials (Gmail, SendGrid, or SMTP)
- SMS service account (Twilio optional for text notifications)
- Basic JavaScript knowledge for data transformation nodes
Step 1: Set Up the Booking Form Webhook
This phase creates the entry point for customer bookings. The webhook receives form submissions and validates incoming data.
Configure the Webhook Trigger
- Add a Webhook node and set it to respond to POST requests
- Set the path to
/booking/submitfor clean URLs - Enable "Respond Immediately" to confirm receipt to customers
- Configure response headers to accept JSON data
Node configuration:
{
"httpMethod": "POST",
"path": "booking/submit",
"responseMode": "onReceived",
"responseData": "{ \"status\": \"received\", \"message\": \"Booking submitted successfully\" }"
}
Add Data Validation
- Create a Function node to validate required fields
- Check for pickup location, dropoff location, contact info, service type
- Format phone numbers to E.164 standard
- Calculate distance and generate initial quote
Validation code:
const requiredFields = ['pickup_address', 'dropoff_address', 'customer_name', 'customer_email', 'service_type'];
const data = $input.item.json;
for (const field of requiredFields) {
if (!data[field]) {
throw new Error(`Missing required field: ${field}`);
}
}
// Format phone number
data.phone = data.phone.replace(/\D/g, '');
if (!data.phone.startsWith('1')) {
data.phone = '1' + data.phone;
}
return { json: data };
Why this works:
The webhook acts as your booking form's backend. When customers submit their information, n8n receives it instantly and validates the data before processing. Immediate validation prevents bad data from entering your system and provides customers with instant feedback if they missed required fields.
Step 2: Store Bookings in Airtable
This phase creates your booking database and admin dashboard foundation.
Configure Airtable Base Structure
- Create a base called "Transport Bookings"
- Add tables: Bookings, Carriers, Payments
- Set up fields in Bookings table: Booking ID, Customer Name, Email, Phone, Service Type, Pickup Address, Dropoff Address, Vehicle/Pet Details, Status, Assigned Carrier, Payment Status, Created Date
Airtable Node Configuration
- Add an Airtable node after validation
- Select "Create" operation
- Map webhook fields to Airtable columns
- Generate unique Booking ID using formula
Node settings:
{
"operation": "create",
"table": "Bookings",
"fields": {
"Booking ID": "={{$now.format('YYYYMMDD')}}-{{$runIndex}}",
"Customer Name": "={{$json.customer_name}}",
"Email": "={{$json.customer_email}}",
"Phone": "={{$json.phone}}",
"Service Type": "={{$json.service_type}}",
"Pickup Address": "={{$json.pickup_address}}",
"Dropoff Address": "={{$json.dropoff_address}}",
"Status": "New",
"Payment Status": "Pending"
}
}
Why this approach:
Airtable serves as both your database and admin interface. The interface builder lets you create views filtered by status, service type, or date. Admins can manually assign carriers by updating the "Assigned Carrier" field, which triggers downstream automation for carrier notifications.
Variables to customize:
Booking IDformat: Adjust date format or add service type prefixStatusvalues: Add custom statuses like "Quoted", "Scheduled", "In Transit"- Table structure: Add fields for pricing, special instructions, or insurance
Step 3: Process Payments with Stripe
This phase handles payment creation and tracking.
Configure Stripe Integration
- Add HTTP Request node for Stripe API
- Set authentication to use Stripe secret key
- Create invoice or payment intent based on service type
- Store payment ID in Airtable for tracking
Stripe API Configuration
{
"method": "POST",
"url": "https://api.stripe.com/v1/invoices",
"authentication": "headerAuth",
"headerAuth": {
"name": "Authorization",
"value": "Bearer {{$credentials.stripeApiKey}}"
},
"body": {
"customer_email": "={{$json.customer_email}}",
"description": "Transport Booking {{$json.booking_id}}",
"amount": "={{$json.quote_amount * 100}}",
"currency": "usd"
}
}
Update Airtable with Payment Info
- Add second Airtable node after Stripe response
- Update the booking record with payment ID
- Set payment status to "Invoice Sent"
Why this works:
Creating invoices immediately after booking ensures payment tracking from day one. Stripe handles the payment processing infrastructure while n8n connects it to your booking system. The payment ID stored in Airtable creates an audit trail and enables payment status tracking.
Step 4: Send Automated Notifications
This phase delivers confirmations to customers and notifications to admins.
Configure Email Notifications
- Add Send Email node after Airtable update
- Create booking confirmation template
- Include booking details, payment link, next steps
Email template:
Subject: Booking Confirmation - {{$json.booking_id}}
Hi {{$json.customer_name}},
Your {{$json.service_type}} booking has been confirmed.
Booking Details:
- Booking ID: {{$json.booking_id}}
- Pickup: {{$json.pickup_address}}
- Dropoff: {{$json.dropoff_address}}
- Estimated Quote: ${{$json.quote_amount}}
Payment Invoice: {{$json.stripe_invoice_url}}
We'll assign a carrier within 24 hours and send you their contact information.
Questions? Reply to this email or call us at (555) 123-4567.
Add Admin Notification
- Add second Email node for admin alerts
- Send to operations team email
- Include link to Airtable record for quick access
Optional SMS Notifications
- Add Twilio node for text confirmations
- Send short confirmation with booking ID
- Trigger only for high-priority bookings
Why this approach:
Immediate confirmations reduce customer anxiety and support inquiries. Automated admin notifications ensure the operations team sees new bookings without checking Airtable constantly. SMS adds a premium touch for time-sensitive services like repo forwarding.
Workflow Architecture Overview
This workflow consists of 12 nodes organized into 4 main sections:
- Data ingestion (Nodes 1-3): Webhook receives booking, validates required fields, formats data
- Database operations (Nodes 4-5): Creates Airtable record, updates with payment info
- Payment processing (Nodes 6-7): Creates Stripe invoice, captures payment ID
- Notification delivery (Nodes 8-12): Sends customer confirmation, admin alert, optional SMS
Execution flow:
- Trigger: POST request to webhook endpoint from booking form
- Average run time: 3-5 seconds per booking
- Key dependencies: Airtable API, Stripe API, email service
Critical nodes:
- Function Node (Validation): Prevents invalid data from entering the system
- Airtable Create: Establishes single source of truth for booking data
- HTTP Request (Stripe): Generates payment invoice and tracking ID
- Send Email: Delivers customer confirmation and admin notification
The complete n8n workflow JSON template is available at the bottom of this article.
Critical Configuration Settings
Airtable Integration
Required fields:
- API Key: Your Airtable personal access token
- Base ID: Found in Airtable API documentation
- Table Name: Exact name (case-sensitive)
Common issues:
- Using base URL instead of base ID → Results in 404 errors
- Mismatched field names → Creates new fields instead of populating existing ones
- Always verify field names match exactly between n8n and Airtable
Stripe Configuration
Required settings:
- API Key: Use test key for development, live key for production
- Webhook signing secret: For payment confirmation webhooks
- Currency: Set to your business currency (USD, EUR, etc.)
Why this approach:
Separating test and production keys prevents accidental charges during development. Stripe's test mode provides realistic payment flows without processing real money.
Variables to customize:
quote_amount: Implement dynamic pricing based on distance, service type, or vehicle sizeinvoice_due_date: Adjust payment terms (immediate, net 7, net 30)- Email templates: Customize branding, add logo, modify copy
Testing & Validation
Component Testing
- Test webhook endpoint: Use Postman or curl to send sample booking data
- Verify Airtable creation: Check that records appear with correct field mapping
- Test Stripe integration: Confirm invoices generate in Stripe dashboard
- Validate email delivery: Send test bookings and verify receipt
Sample test payload:
{
"customer_name": "Test Customer",
"customer_email": "test@example.com",
"phone": "5551234567",
"service_type": "Auto Transport",
"pickup_address": "123 Main St, Chicago, IL",
"dropoff_address": "456 Oak Ave, Austin, TX",
"vehicle_details": "2020 Honda Civic",
"quote_amount": 850
}
Common troubleshooting:
- Webhook not receiving data → Check firewall settings, verify POST method
- Airtable errors → Confirm API key has write permissions
- Stripe failures → Validate API key, check amount format (cents not dollars)
- Email not sending → Verify SMTP credentials, check spam folder
Production Deployment Checklist
| Area | Requirement | Why It Matters |
|---|---|---|
| Error Handling | Add Error Trigger workflow to catch failures | Prevents lost bookings when APIs fail |
| Monitoring | Set up execution logging and alerts | Detect issues within minutes instead of hours |
| Rate Limiting | Add delays between API calls for high volume | Prevents hitting Airtable/Stripe rate limits |
| Data Backup | Schedule daily Airtable exports | Protects against accidental deletions |
| Security | Use environment variables for API keys | Prevents credential exposure in workflow JSON |
| Documentation | Add notes to each node explaining logic | Reduces troubleshooting time by 70% |
Real-World Use Cases
Use Case 1: Auto Transport Broker
- Industry: Vehicle shipping
- Scale: 50-100 bookings per week
- Modifications needed: Add vehicle condition photos upload, integrate with carrier network API, implement dynamic pricing based on route and season
Use Case 2: Pet Transport Service
- Industry: Pet relocation
- Scale: 20-30 bookings per week
- Modifications needed: Add pet health certificate tracking, integrate with veterinary records, include climate-controlled transport options
Use Case 3: Repo Forwarding Network
- Industry: Auto recovery
- Scale: 200+ urgent bookings per week
- Modifications needed: Priority routing for time-sensitive pickups, GPS tracking integration, law enforcement notification system
Customizing This Workflow
Alternative Integrations
Instead of Airtable:
- Google Sheets: Best for simple tracking - requires 3 node changes (use Google Sheets nodes)
- PostgreSQL: Better for 1000+ bookings/month - swap Airtable nodes for Postgres nodes
- Supabase: Use when you need real-time dashboard - provides built-in API and auth
Workflow Extensions
Add automated carrier assignment:
- Connect to carrier availability API or Airtable
- Add Function node to match booking requirements with carrier capabilities
- Automatically update "Assigned Carrier" field
- Nodes needed: +4 (HTTP Request, Function, Airtable Update, Email)
Scale to handle more bookings:
- Implement queue system for high-volume periods
- Add batch processing for overnight bookings
- Use Redis for caching carrier availability
- Performance improvement: Handle 500+ bookings/hour vs 50/hour
Integration possibilities:
| Add This | To Get This | Complexity |
|---|---|---|
| Twilio SMS | Real-time booking confirmations | Easy (2 nodes) |
| Google Maps API | Automatic distance calculation and routing | Medium (4 nodes) |
| QuickBooks | Automated accounting and invoicing | Medium (6 nodes) |
| Slack | Team notifications for new bookings | Easy (2 nodes) |
| Calendly | Schedule pickup/delivery appointments | Medium (5 nodes) |
Get Started Today
Ready to automate your logistics booking process?
- Download the template: Scroll to the bottom of this article to copy the n8n workflow JSON
- Import to n8n: Go to Workflows → Import from URL or File, paste the JSON
- Configure your services: Add your API credentials for Airtable, Stripe, and email
- Test with sample data: Send test bookings through the webhook to verify everything works
- Deploy to production: Activate the workflow and connect your booking form
Need help customizing this workflow for your specific logistics needs? Schedule an intro call with Atherial.
Complete n8n Workflow JSON Template
[object Object]
