Automate consent-based SMS and RCS marketing campaigns from Google Sheets with n8n and RCSZilla.
This workflow gives small businesses, agencies, ecommerce teams, clinics, salons, real estate teams, and local service providers a practical SMS/RCS marketing automation system without building a custom campaign platform. Google Sheets acts as the campaign queue, n8n handles filtering and personalization, and RCSZilla queues each message for delivery.
The workflow is designed to help users start with SMS by default and move toward RCS-ready messaging when their RCSZilla account and sending route support it. RCSZilla can use an Android phone and SIM card as a device-based SMS gateway, which makes it useful for teams that want a free SMS marketing workflow before committing to a traditional paid SMS API provider. Carrier plan costs and local rules can still apply.
Most n8n SMS marketing templates are built around paid SMS providers. This template is different because it shows a direct RCSZilla use case:
channel column.It positions RCSZilla as a practical SMS/RCS marketing automation layer for n8n users who want campaigns, reminders, promotions, lead follow-up, local offers, and customer reactivation without starting with a complex marketing suite.
The workflow runs every 15 minutes and reads the Campaign Queue tab in Google Sheets. Only rows with status set to ready, to_send, to send, or pending are considered.
The Code node checks every row for the required marketing fields:
message_idphoneconsent = yessend_after timeRows that fail validation are not sent. They are written to the Send Log tab with a skip reason.
The workflow renders variables inside the message template. Supported variables include:
{{first_name}}{{last_name}}{{offer_text}}{{offer_url}}{{campaign_name}}{{segment}}{{channel}}If the message does not already include an opt-out instruction, the workflow appends:
Reply STOP to opt out.
The IF node separates sendable contacts from skipped contacts. This keeps campaign execution transparent and helps users understand exactly why a message was or was not queued.
Eligible contacts are sent to the RCSZilla node. The workflow uses the channel field from the sheet:
sms by defaultrcs only when supported by the user's RCSZilla account and routeThe workflow spaces eligible messages using scheduledAt, so a campaign does not hit every contact at the same second.
After a successful queue call, the workflow marks the original row as queued in Google Sheets and appends a detailed row to Send Log with:
Skipped contacts are also logged with the reason they were skipped.
The workflow includes an opt-out webhook for inbound replies. If a customer replies with STOP, UNSUBSCRIBE, CANCEL, END, or QUIT, the workflow saves the phone number and keyword to the Opt Outs tab.
Use that tab to update your master contact list or suppression process before the next campaign.
This template highlights RCSZilla as an SMS/RCS marketing automation tool for n8n:
RCSZilla setup guide: https://docs.rcszilla.com/?page=get_started
Create a Google Sheet with these tabs, or import the included Excel template file:
SMS RCS Marketing Google Sheets Template - RCSZilla.xlsx
After importing the template into Google Sheets, copy the spreadsheet ID from the Google Sheets URL and replace PASTE_SMS_RCS_MARKETING_SHEET_ID in every Google Sheets node.
Recommended columns:
message_id
phone
first_name
last_name
consent
opt_out
channel
segment
campaign_name
message_template
offer_text
offer_url
send_after
status
queued_at
last_error
Example row:
message_id: promo-001
phone: +40700000000
first_name: Maria
consent: yes
opt_out: no
channel: sms
segment: salon_vip
campaign_name: May VIP Offer
message_template: Hi {{first_name}}, {{offer_text}} {{offer_url}}
offer_text: your May VIP discount is ready.
offer_url: https://example.com/vip
send_after: 2026-05-21 10:00:00
status: ready
Recommended columns:
timestamp
message_id
campaign_name
phone
channel
status
scheduled_at
message
skip_reason
rcszilla_response
Recommended columns:
received_at
phone
keyword
message
source
n8n-nodes-rcszilla.Campaign Queue, Send Log, and Opt Outs tabs.n8n-nodes-rcszilla.Google Sheets SMS RCS marketing automation n8n - RCSZilla.json.PASTE_SMS_RCS_MARKETING_SHEET_ID in every Google Sheets node with your sheet ID.Campaign Queue with consent = yes, channel = sms, and status = ready.Send Log.Hi Maria, your May VIP discount is ready. https://example.com/vip Reply STOP to opt out.
This workflow is for permission-based SMS/RCS marketing only.
Do not use purchased lists, scraped phone numbers, or unsolicited contacts. Keep consent records, respect STOP replies, follow quiet hours, avoid sensitive personal data in message content, and check local SMS/RCS rules before sending campaigns.
The workflow helps with safer campaign behavior by:
You are still responsible for your own legal review, consent process, privacy policy, terms, sender identification, and regional messaging requirements.
maxSendsPerRun in the Code node to raise or lower campaign volume.minSecondsBetweenMessages to control pacing.quietStartHour and quietEndHour for your region.segment to run different offers for different audiences.channel = sms unless your RCSZilla setup supports another route.Send Log.status = ready, consent = yes, and a valid phone number.skip_reason field in Send Log.message_id exists and is unique.channel = sms unless your account supports RCS sending.from and message fields to the webhook URL.