SMS

Send text messages through your own SMS provider, manage contacts, and auto-fire welcome or receipt SMS when a Campaign conversion webhook (opt-in, purchase) tells EziLinks a new contact just came in.

Overview

EziLinks lets you send SMS directly from your account using your own credentials with an SMS provider (Kudosity, Twilio, ClickSend, MessageBird, or Bird). You sign up with the provider, paste your API credentials into EziLinks, and pay the provider directly at their wholesale rates. To track clicks on any links inside your SMS, create an EziLinks short link in the Links tab first, then paste the ezl.me/… URL into your message body — the recipient clicks land in your Link analytics like any other short link.

The main things you can do:

  • Connect an SMS provider — bring your own credentials from Kudosity, Twilio, ClickSend, MessageBird, or Bird
  • Send a single message to any contact from the SMS composer
  • Send to a saved list in one go, with personalisation tokens like {{firstName}}
  • Schedule a send for a later date/time in your local timezone
  • Auto-send SMS on a Campaign event — when a Campaign conversion webhook (opt-in, purchase) fires with a mobile number in the payload, EziLinks can send a configured SMS to that contact automatically. Set up per Campaign in the Campaigns page.
  • Manage contacts and lists — import from CSV, tag, opt-in / opt-out, segment
  • Track delivery — see delivered / failed / queued status in real time via provider webhooks
  • Manually opt contacts in and out from the Contacts tab — opted-out contacts are automatically excluded from all future list sends
Where is SMS in EziLinks? In the left sidebar under SMS. Everything sits on one page with six tabs across the top: Compose, Contacts, Lists, Scheduled, History, and Providers.

How it works

When you click Send, EziLinks does the following behind the scenes:

  1. Picks a provider — either the default provider on your account, or the one you selected on the composer
  2. Sends the message body exactly as you typed it via the provider's API, using your connected credentials
  3. Attaches a signed tracking token to the send so delivery reports from the provider can be matched back to the correct message row
  4. Records the message in your history with a status of queued
  5. Updates the status via a webhook when the provider reports back with sent, delivered, or failed

Automated SMS triggered by external webhooks (see the Campaigns feature) go through a separate flow — documented below in "Automated SMS on Campaign webhook events".

How clicks get tracked

EziLinks does not automatically shorten long URLs pasted into the SMS body. To attribute clicks back to a send, do this:

  1. Create a short link in the Links tab for the destination you want to share
  2. Copy the resulting ezl.me/… URL
  3. Paste it into your SMS message body

When recipients click the short link it flows through the same tracking pipeline as any other EziLinks link — you see clicks, unique visitors, device/browser breakdown, and any UTM or pixel data configured on the link.

Paying for the SMS

EziLinks is BYO (Bring Your Own) provider. You pick a provider from the five supported ones (Kudosity, Twilio, ClickSend, MessageBird Legacy, or Bird Platform), sign up with them directly, and pay their per-message rates — typically 20–50% cheaper than SaaS-hosted SMS credit schemes. EziLinks never bills you for SMS traffic; only your provider does.

You can also connect multiple providers at once and pick a different one per send — useful when one is cheaper for AU/NZ and another for EU/US.

Connecting your first provider

Before you can send anything from your own account, you need to connect at least one SMS provider.

1 Go to SMS > Providers

From the sidebar, open SMS, then switch to the Providers tab.

2 Pick a provider

Click + Connect provider. In the modal, choose one of the five supported providers from the dropdown: Kudosity (Burst SMS), ClickSend, Bird (Platform API), MessageBird (Legacy REST), or Twilio. The modal expands the fields required for whichever provider you selected, and shows the setup notes + sender-ID rules for that provider inline.

3 Paste your credentials

Each provider requires different fields (API key + secret for Kudosity, account SID + auth token for Twilio, a single access key for MessageBird / Bird, or username + API key for ClickSend). See the per-provider guides below for exactly where to get these from the provider's dashboard.

Optionally give the credential a Label like "My Kudosity account" — useful if you connect the same provider more than once (e.g. one account for AU, another for UK).

4 Set a default sender ID

The default sender is what recipients see as the "From" — an alphanumeric brand name (e.g. EZILINKS) or a phone number. Read the sender ID rules shown right in the modal for your provider carefully; some countries require pre-registration.

5 Enter your rate (optional)

The Cost per SMS part field (with a currency dropdown alongside — AUD, USD, GBP, NZD, EUR) is optional. When filled in, EziLinks uses it to show a pre-send cost estimate on the composer. Leave blank if you don't care about estimates.

6 Tick "Default" (optional)

Marks this credential as the default provider for the composer. If you only have one connected provider it's the default automatically.

7 Click Connect

EziLinks encrypts credentials at rest, saves them, and lands you back on the Providers tab. The new credential shows an Not verified pill until you send a test SMS.

8 Send a test SMS

Click Send test SMS on the credential card, enter your own mobile number, and hit send. If it arrives, the pill flips to Verified. If it fails, the error message on the toast tells you what to fix (usually a sender-ID mismatch or a bad credential).

Connect multiple providers? Yes — you can have several providers connected at once. One is marked as default, and you can pick a specific one per send from the composer. This is useful when different providers are cheaper in different regions.

Sending a single message

The composer is the main SMS screen. Opens by default when you land on SMS.

  1. Leave the Send to dropdown at "To one number (ad-hoc)" (the default)
  2. Pick a saved contact from the — Pick a contact — dropdown, or use the country picker and number box alongside it for an ad-hoc send. Choose the country, type the number in local format (427 208 925), and EziLinks converts it to international format as you type — or paste a number that already starts with + and the country picker moves to match. A green tick shows the final number and whether it's a mobile or a landline; a red message tells you what's wrong if it isn't valid. Selecting a contact from the dropdown fills the number automatically; typing a different number clears the dropdown so it's obvious you're sending ad-hoc.
  3. Under Send via provider, leave the default or pick a specific connected provider from the dropdown
  4. Type your message. To include a trackable link, first create a short link in the Links tab, then copy the ezl.me/… URL and paste it into the body — recipient clicks will appear in that link's analytics
  5. Watch the character/parts meter under the message box — each SMS "part" is 160 GSM characters (or 70 UCS-2 if you use emoji or non-Latin characters). Messages longer than one part are billed per part.
  6. Click Send now
Where's the sender ID set? The sender (what recipients see as the "From" — either an alphanumeric brand like EZILINKS or a phone number) is configured on each connected provider under SMS > Providers, not on the composer. Change the sender per-provider from the Providers tab; every send through that provider uses its stored default sender.

Worked pricing example

Say your provider charges $0.07 per part (roughly Kudosity's AU rate). Here's how the cost stacks up as the message gets longer:

Message length Encoding Parts Cost per recipient Cost to 100 recipients
Up to 160 chars ("Hi Jane, appointment tomorrow at 10am. Reply YES to confirm.") GSM-7 1 $0.07 $7.00
161–306 chars (e.g. a 300-char reminder with address + reschedule instructions) GSM-7 2 $0.14 $14.00
307–459 chars (a 310-char message tips into 3 parts — see note below) GSM-7 3 $0.21 $21.00
Any message with an emoji or accented char (é, ñ, 🎉) UCS-2 1 part = 70 chars, subsequent parts = 67 each from $0.07 from $7.00
The 306-character trap. A common mistake: assuming 2 parts fit 2 × 160 = 320 characters. It doesn't — each concatenated part loses 7 characters to a UDH header the carrier uses to stitch the parts back together, so 2 parts actually fit 153 × 2 = 306 characters. A message with 307–459 characters is billed as 3 parts. Keep marketing messages under 306 (or use a shortened link to save characters) to stay at 2 parts.
Personalisation tokens like {{firstName}} and {{lastName}} only apply when sending to a saved list (where each contact has stored name/email details), not raw phone numbers. In one-off sends, use the recipient's actual name in the message; save tokens for list sends. Custom fields imported alongside your contacts (any extra CSV column) are also available as merge tags in the SMS body.
Watch out for smart quotes. Curly apostrophes (Word's autocorrect: "don’t"), em dashes (—), and other Unicode punctuation aren't part of GSM-7 — a single one of them flips the whole message to UCS-2 and cuts the per-part limit from 160 to 70. If your 155-char message suddenly shows as 3 parts in the composer, look for a sneaky curly quote and replace it with a straight ' or ".

Sending to a list

When you want to send the same SMS to a whole saved list in one go — a workshop reminder, a sale announcement, an appointment update — use the composer's list mode. This isn't a "campaign" in the marketing-automation sense; it's just a bulk send to everyone in the list.

From the composer:

  1. Change the Send to dropdown from "To one number (ad-hoc)" to "To a list"
  2. Give it a name in the SMS Name field — a short label so you can find this send later in History (e.g. "March newsletter" or "Workshop reminder 5 Apr")
  3. Pick one or more saved lists from the multi-select (hold Cmd/Ctrl to pick more than one)
  4. Write your message. Use personalisation tokens for anything that varies per contact: {{firstName}}, {{lastName}}, {{email}}, {{phone}} (plus any custom fields you imported on the contacts)
  5. Optionally preview recipients — shows the count and highlights any opted-out contacts that will be skipped
  6. Click Send now to fire it immediately, or use the Scheduled tab (see below) to queue it for later

Every message in the send is a separate row in your History tab, so you get per-recipient delivery reporting once the provider webhook fires the status updates.

Opted-out contacts are automatically skipped. Once you mark a contact as opted-out in the Contacts tab, they will not receive any of these list sends — they will not count towards your recipient total either. But opt-out itself is a manual action right now: EziLinks does not receive inbound SMS, so a recipient's STOP reply does not automatically opt them out. See "Opt-outs and STOP handling" below for the workflow.
Send from the Lists tab too. The fastest way to send to one specific list is from the Lists tab — click the 💬 SMS button on that list's row and you land in the composer pre-configured for that list with a default name filled in.

Scheduling a list send for later

Use the Scheduled tab when you want an SMS to go to a list at a specific future date and time — a workshop reminder 24 hours before the event, an early-access announcement at 9am tomorrow, a Christmas offer on the 24th, and so on. Scheduling is list-only right now — ad-hoc single-number sends fire immediately from the Compose tab.

How the scheduler works: EziLinks polls for due sends every 60 seconds. Schedule slots are in 15-minute increments (00, 15, 30, 45 past the hour), and the send typically fires within a minute of its scheduled time. Recipients are resolved at send time, not when you schedule — anyone added to the list before that moment is included, anyone opted-out is skipped, no need to re-schedule if the list changes.

Step-by-step: schedule your first send

1 Go to SMS → Scheduled

Open the SMS page from the sidebar, then click the Scheduled tab. You'll see a list of any existing scheduled sends and a filter bar at the top.

2 Click "+ Schedule an SMS"

Top-right of the panel. Opens the scheduling modal.

3 Give it a label

Short, meaningful, for your own reference. Examples:

  • Workshop 24h reminder — Apr 5
  • Black Friday early access
  • Christmas voucher — Dec 24 9am

Labels are searchable in the filter bar, so pick something you'd recognise weeks later.

4 Pick one or more lists

Hold Cmd (macOS) or Ctrl (Windows) to multi-select. Every contact in the selected list(s) will receive the SMS at send time, unless they're opted-out or duplicated across lists (each contact receives one message regardless of how many selected lists they belong to).

5 Choose the SMS provider

Which of your connected providers should send this. Defaults to your account default. Useful to override when you know a specific provider is cheaper for the destination country or has the right sender ID registered.

6 Pick a date and time

Three inputs: date (calendar picker), hour (00–23), minute (00, 15, 30, 45 only). Times are in your local timezone — they display in the same timezone your browser reports.

Because the poll cadence is 60 seconds, a send scheduled for 10:00 will typically go out between 10:00:00 and 10:00:59. Don't schedule anything time-critical to the second.

7 Write the message body

Use personalisation tokens ({{firstName}}, {{lastName}}, {{email}}, {{phone}}) just like in a live send. The character/part meter shows how many SMS parts the message will cost.

Remember the 306-character 2-part limit (see the earlier pricing table). Long messages sent to a big list can add up fast.

8 Click Save

The send is now queued and appears in the Scheduled list with a status of Scheduled. You'll see the label, the target list(s), the provider, and the exact send time.

Managing scheduled sends

The Scheduled tab shows every queued send with a status column. Statuses you'll see:

  • Scheduled — queued, waiting for the send time
  • Sending — the scheduler picked it up and is dispatching messages
  • Sent — all messages have been handed to the provider
  • Cancelled — you cancelled it before it fired
  • Failed — the scheduler couldn't send (usually a missing provider or list, or a provider error — check the Result column)
  • Draft — saved but not yet activated (useful for prep-in-advance workflow)
  • Paused — the send was mid-flight but paused (only appears for large sends caught mid-batch)

For every Scheduled send, you can:

  • Edit — change the message body, target lists, provider, or send time up until it fires
  • Cancel — the send won't happen; the row stays visible so you have an audit trail
  • Delete — remove the row entirely

Filtering the Scheduled list

The filter bar at the top of the Scheduled tab has these fields:

  • Label — contains-match on the label you gave the send
  • When (range) — from/to dates on scheduled send time
  • Lists — contains-match on the target list names
  • Provider — contains-match on provider name (e.g. "kudosity")
  • Status — dropdown of the statuses above
  • Result — contains-match on the outcome text (e.g. "Sent 42/45" or a specific error)

Click Clear to reset all filters at once.

Common use cases

Reminder 24 hours out. Just after you finish sending confirmations for a workshop next Saturday at 10am, schedule the reminder send for Friday 10am on the same list. Recipients get an automatic nudge.
Time-zone-friendly launches. Sending a promotion to a national list at 9am? Schedule it for 9am local time in your region — contacts outside your timezone will still receive it around then. If you want strict per-recipient local times, split the list into per-timezone lists and schedule several sends.
Drip-style follow-ups. Schedule two or three sends against the same list at 24-hour intervals for a mini drip campaign. Contacts opted-out in between will be automatically skipped at each send.
Sending outside permitted hours will fail your compliance obligations. Most jurisdictions restrict marketing SMS to business hours in the recipient's local time (Australia: 9am–9pm; USA: 8am–9pm; UK: 8am–9pm). Schedule accordingly — a 6am send may be legal to some recipients and illegal to others depending on where they are. The scheduler does not enforce quiet hours; you do.
Testing a scheduled send. To test the end-to-end flow without waiting, schedule for 5–10 minutes into the future to a small test list containing just your own number. Watch the Scheduled tab, then the History tab, to see the whole cycle.

Automated SMS on Campaign webhook events

A Campaign SMS trigger auto-fires an SMS when an external tool (systeme.io, a payment gateway, an ecommerce platform, a CRM) POSTs to your Campaign's conversion webhook with a mobile number in the payload. This is a feature of the separate Campaigns page in the sidebar, not the SMS page. Typical use cases:

  • A prospect fills in your funnel form — systeme.io POSTs the opt-in webhook — EziLinks sends a welcome SMS with a link to the first video
  • A customer completes a checkout — the payment gateway POSTs the purchase webhook — EziLinks sends a thank-you SMS with a receipt link
  • A booking is confirmed — the booking tool POSTs its confirmation webhook — EziLinks sends the venue address and any pre-appointment instructions

Triggers are configured per Campaign in the Campaigns page — not on the SMS page.

The funnel form must collect a mobile number. When the webhook fires, EziLinks scans the payload for a phone, mobile, or equivalent field. If none is present (or the number can't be parsed), no SMS is sent — the trigger is a no-op. In systeme.io: edit the opt-in form and add a Phone or Mobile field. Same idea for any other funnel builder.

Setting one up

  1. Go to Campaigns in the sidebar and open the Campaign you want to attach the trigger to
  2. Find the conversion webhook you want to react to (e.g. opt-in, purchase). If you don't have one yet, add the webhook URL into your external tool first and wait for it to fire once so it appears in the list
  3. Click + Set up SMS (or the equivalent SMS-automation control) on that webhook row
  4. Give the trigger a label (for your own records, e.g. "Workshop welcome SMS")
  5. Pick the SMS provider to send from
  6. Optionally pick a list to add the contact to (useful when you want to run follow-up SMS sends to this same audience later)
  7. Write the message body. Personalisation tokens like {{firstName}} pull from the webhook payload / newly-created contact
  8. Save
Runs once per webhook event. Each incoming webhook that matches the Campaign is processed once. If the same contact submits your funnel form twice, they get two SMS. Set up your funnel to deduplicate on your side if that's not desirable.

Full Campaign trigger docs live under Campaigns.

Contacts and lists

Every phone number is stored in international E.164 format — prefixed with a + and a country code, like +61427208925. You don't have to type it that way: each phone field pairs a country picker with the number box, so you can enter 427 208 925 with Australia selected, or 415 555 0100 with United States selected, and EziLinks converts it. Anything you type starting with + is understood on its own and sets the country for you.

There is no assumed country. A number that isn't valid for the country you've chosen is rejected with a message saying so, rather than being quietly turned into a number that doesn't exist.

Set your default country once: go to SMS > Providers and set Default country for phone numbers under Regional settings. That pre-selects the country on every phone field in this section and is what local-format numbers are read against when they arrive from a CSV import or a Campaign webhook. Numbers written with + ignore it entirely.

Adding a contact manually

For one-off additions, go to SMS > Contacts and click + Add contact. The form has five fields:

  • Phone * — the only required field, and the only one with a country picker beside it. Pick the country and type the local number, or type a + number and the picker follows. The line underneath shows the international number you're about to save, or why it was rejected.
  • First name, Last name, Email — all optional. First and last name become the {{firstName}} and {{lastName}} merge tags.
  • Consent source — how this person came to be on your list. Options are Manual entry (the default), Web form, Imported list, and Opted in via reply.
Why consent source matters: it is your audit trail. If a recipient complains, or a regulator asks how you obtained the number, this field is the record of where the consent came from. It does not change how EziLinks sends — nothing is blocked based on it — but set it honestly, because it is the evidence you would rely on. See Compliance essentials below.

The same form is reused for editing: click Edit on any contact row to change their details or correct the consent source. Each contact row carries four other actions:

  • 💬 SMS — send a one-off message to just this person. Disabled once they've opted out.
  • Validate — checks the number against your connected provider's lookup and reports the line type and carrier. Only shown until a contact has been validated once; needs a connected provider or it returns "Validation unavailable".
  • Opt in / Opt out — flips their subscription status by hand, for when someone asks to be removed by phone or email rather than by replying STOP.
  • Del — deletes the contact entirely, including their membership of every list.

Importing contacts

The fastest way is CSV paste:

  1. Go to SMS > Contacts
  2. Click 📄 Import CSV
  3. Optionally use Add all to list (optional) to drop every imported contact straight into an existing list. Leave it blank to import them without any list membership — you can add them to lists later from the Lists tab.
  4. Check Country for local-format numbers. It starts on your account default and only applies to rows written in local format; rows starting with + keep their own country regardless.
  5. Paste your CSV into the CSV data textarea. First row is the header. Recognised column names: phone (required), firstName, lastName, email. Snake-case (first_name, last_name) also works. Any extra columns are stored as custom fields on the contact and become available as merge tags in the SMS body.
  6. Click Import. Rows already in + format are taken as-is. Rows in local format are read against the country you picked above — so 0427208925 with Australia selected becomes +61427208925. Rows that can't be parsed, or that aren't valid for the chosen country, are skipped rather than guessed at.
  7. You'll get a toast with the imported / skipped count. If anything was skipped it also names the first offending number and the reason — usually a local-format row belonging to a different country than the one selected.
Example CSV — the first two rows carry their own country codes and import correctly no matter what the country picker says. The third is local format, so it only imports correctly if the picker is set to Australia:
phone,firstName,lastName,email
+61427208925,Jane,Doe,jane@example.com
+14155550100,Ana,Reyes,ana@example.com
0427208925,Bob,Smith,bob@example.com

Building and managing lists

A list is just a named group of contacts. Sends and scheduled sends target lists, not individual contacts, so at least one list is needed before you can send to more than one person.

Go to SMS > Lists and click + New list. A list needs a List name *; the Description is optional and for your own reference. Click Create.

Each list row then gives you four actions:

  • 💬 SMS — jumps to the Compose tab with this list pre-selected. Greyed out while the list is empty.
  • Members — opens the membership manager (below).
  • ↓ Export CSV — downloads the list's contacts with their membership info.
  • Delete — removes the list. The contacts themselves are not deleted, only their membership.

Adding and removing list members

Click Members on a list to open the Manage list window. It has two halves:

  • Current members (top) — everyone currently on the list, with a Filter members… box for long lists. Each row has a Remove button that takes them off this list without deleting the contact.
  • Add contacts to this list (bottom) — every contact in your account, with a Search all contacts… box. Contacts already on the list are shaded and can't be ticked. Tick as many as you want, then click Add selected.

Changes apply immediately — there is no separate save step. Click Close when you're done.

Tip: the fastest way to build a list from scratch is to create it first, then use Add all to list during CSV import so the contacts land in it directly. That saves ticking them one at a time afterwards.

Opt-outs and STOP handling

Important — EziLinks does not yet receive inbound SMS. When a recipient replies STOP, that reply lands at your SMS provider (Kudosity, Twilio, ClickSend, MessageBird, Bird), not at EziLinks. It is your responsibility to check your provider's inbox for STOP replies and mark those contacts as opted-out inside EziLinks so they're excluded from future sends.

The workflow today:

  1. Log into your SMS provider's dashboard periodically (Kudosity, Twilio, etc.) — the inbound / SMS log will show any replies from your recipients
  2. Find every reply containing STOP, UNSUBSCRIBE, OPT OUT, or similar
  3. In EziLinks, go to SMS → Contacts, find the matching contact by phone number, and click Opt out
  4. The contact is now excluded from every future list send from your account

Once inbound SMS is added to EziLinks, this will happen automatically. For now, the manual step is required to stay compliant.

Alternative: include an opt-out link in the message

Rather than relying on STOP replies (which need manual handling until inbound ships), a common workaround is to include a short link in your SMS pointing to an opt-out landing page you host yourself. When the recipient clicks it, your form submits their number back through a webhook (or you review it manually) and you mark them opted-out in EziLinks. This works around the missing inbound step entirely.

You can also manually opt a contact in or out from their contact detail page. Opted-out contacts stay in your database (you can still see their history) but are excluded from all future list sends.

Delivery reports

Every message you send flows through these statuses:

  • queued — accepted by the provider, waiting to be handed to the mobile carrier
  • sending — handed off, in transit
  • sent — carrier has confirmed receipt (not the same as reaching the handset)
  • delivered — the recipient's handset has confirmed delivery
  • failed — carrier rejected or timed out (recipient handset off, invalid number, blocked, etc.)

Status updates come via webhooks from your provider. Providers vary in how quickly they report delivery — some within seconds, others up to 48 hours (especially for internationally roaming recipients).

Twilio test credentials never fire delivery webhooks. If you're using Test Account SID / Auth Token from Twilio, your messages will stay stuck at queued forever. Switch to live credentials to see real delivery reports.

Choosing a provider

Each provider has strengths in different regions and use cases. Here's a quick comparison:

Provider Best for Cost profile Alphanumeric senders Setup speed
Kudosity Australia, New Zealand Low for AU/NZ Yes (register first) Same-day (AU business verification)
Twilio USA, Canada, global fallback Higher per message, wide coverage Yes (not US/CA) Minutes for non-US, 2–4 wks for US (A2P 10DLC)
ClickSend AU, NZ, UK, US mid-volume Mid-market, transparent pricing Yes ≈ 5 minutes
MessageBird (Legacy) Europe, India, SE Asia Cheap on non-US routes Yes (not US/CA) Sandbox instant, live after business verification
Bird (Platform API) New Bird accounts, EU, UK, APAC Similar to MessageBird Yes (pre-register) 1 business day for AU sender review

All five providers support inbound SMS on their side, but EziLinks does not yet consume it — STOP handling is manual today, see the Opt-outs and STOP handling section above.

Rule of thumb

  • Sending mostly to Australia or New ZealandKudosity first, ClickSend as a fallback
  • Sending to USA or CanadaTwilio (mandatory 10DLC registration for US)
  • Sending to UK, EU, India, SE AsiaMessageBird Legacy if you have an older account, otherwise Bird Platform API
  • Sending globally and want one bill → Twilio or Bird, but expect to pay more per part

Per-provider setup guides

Click through for detailed step-by-step credentials, sender ID setup, error codes, and gotchas:

Compliance essentials

SMS is one of the most heavily regulated channels in marketing. A few essentials that apply almost everywhere:

  • Consent — the recipient must have consented to receive marketing SMS from you. Consent can be express (they signed up for texts) or inferred (they're an existing customer within a reasonable timeframe). Keep records.
  • Identify the sender — your sender ID or the message body must make it clear who is sending. EZILINKS as an alphanumeric sender does this well.
  • Provide an opt-out — every marketing SMS must include a way to stop. Because EziLinks does not yet receive inbound SMS, you must either (a) monitor your provider's inbox for STOP replies and manually opt those contacts out inside EziLinks, or (b) include a short link in every message pointing to your own opt-out landing page.
  • Send within allowed hours — most markets ban marketing SMS outside business hours (Australia: 9am-9pm local time; US: 8am-9pm; UK: 8am-9pm).
  • Register your senders — many markets now require carrier pre-registration for alphanumeric senders or brand names.
Your compliance is your responsibility. EziLinks provides the tools (sending, contact management, manual opt-out list, delivery reporting) but you as the sender are legally responsible for complying with the SMS marketing rules of every country you send to. This includes obtaining valid consent before sending, identifying yourself in each message, providing a working opt-out mechanism, honouring opt-out requests promptly (typically within 5 business days), and only sending within permitted hours. Penalties for non-compliance are real and material — up to $2.22 million per day under Australia's Spam Act 2003, up to $1,500 per violation per recipient under the US TCPA, and equivalent regimes in the UK, EU, Canada, and elsewhere. If you're unsure of the rules for a target country, check with the local telecommunications regulator or a lawyer before your first send.
Country-specific starting points:
  • Australia: Spam Act 2003 and the eMarketing Code — acma.gov.au/spam-rules-business
  • New Zealand: Unsolicited Electronic Messages Act 2007 — dia.govt.nz/spam
  • USA: TCPA + CTIA guidelines — fcc.gov
  • UK: PECR (Privacy and Electronic Communications Regulations) — ico.org.uk
  • EU: GDPR + ePrivacy Directive — check your national data protection authority
  • Canada: CASL (Canada's Anti-Spam Legislation) — fightspam.gc.ca

What does it cost?

Two costs to think about:

  • EziLinks subscription — SMS is included on the Pro Toolkit and Agency plans; not available on Free
  • Per-message provider cost — paid directly to your SMS provider at their per-message rate. This varies wildly by destination country and by provider. Rule of thumb: AU messages are $0.03–$0.10 each, US is $0.008–$0.03, UK/EU is €0.02–€0.08.

Multi-part messages (over 160 GSM characters or 70 UCS-2) are billed per part. Keep messages concise to keep costs down.

© 2026 EziLinks. All rights reserved.