Overview

What is Smaily Connect?

Smaily Connect links your Shopify store to your own Smaily email-marketing account and, optionally, to Smaily Campaign Intelligence (personalised product recommendations and purchase-based automations).

It does three things:

  • Syncs contacts — customers who have opted in flow into your Smaily contact list.
  • Triggers automations — store events (welcome, first order, abandoned checkout) start your Smaily workflows.
  • Powers recommendations — when you connect Campaign Intelligence, your catalog, customers and orders seed personalised recommendations and intelligence-run automations.

Your data stays yours. Contacts live in your Smaily account; the app only connects the two systems.

How the pieces fit together

There are three systems:

  • Shopify — your store: customers, orders, products, and storefront events.
  • Smaily — your email-marketing account, where contacts and automation workflows live (yourcompany.sendsmaily.net).
  • Campaign Intelligence — Smaily's recommendation engine at intelligence.smaily.com. Optional, connected with a one-time setup link.

Smaily Connect is the bridge. Shopify sends events and data to the app; the app forwards contacts and triggers to Smaily, and (if connected) catalog/customer/order data to Campaign Intelligence.

Before you start

You need:

  • A Smaily account with API access. You create API users in Smaily under Preferences → API.
  • (Optional) A Campaign Intelligence setup link — a one-time link Smaily provides if you use the recommendation add-on.

Everything is set up through Initial setup, a short guided flow described next.

Getting started

After install: the Dashboard

When you open the app it lands on the Dashboard. Until setup is complete it shows Setup incomplete with a prompt to connect Smaily and/or Campaign Intelligence, and an Initial setup / Resume setup button.

Once things are running the Dashboard shows either Everything's running or Running — with failures to review (with a link to the Event log).

If Smaily refuses every request because your Smaily package does not include API access, the Dashboard shows Smaily not connected instead, and Smaily as Not connected — see Error messages & fixes → Smaily connection errors.

Initial setup has 6 steps. Steps 2 and later stay locked until your Smaily connection is verified.

Step 1 — Connect your Smaily account

Enter your Smaily API credentials. The app verifies them before saving.

  • Subdomain — the part before .sendsmaily.net (e.g. yourcompany).
  • API username and API password — create these in Smaily under Preferences → API.

Press Test connection. On success you'll see Verified and Connection verified — N active automations found. You can change these credentials later under Settings → Connection.

Step 2 — Contacts

Choose which contacts are synced to Smaily and which fields ride along, then bring your existing contacts over.

  • Pick a consent preset (see Contacts settings). The default sends only customers who opted in.
  • Email and language are always synced; pick any additional fields you want.
  • Under Initial contact import, start the one-time Contacts import. It runs in the background — you can leave the page and it keeps going.

Step 3 — Automated letters

Map store events to your Smaily automation workflows.

  • Store-run triggers: Welcome (a customer subscribes to your email marketing — once per contact), First order (a customer's first order), Abandoned checkout (checkout started but not completed).
  • If you connect Campaign Intelligence, you can also configure Engine-run recommendation automations here — the engine decides when to enrol each contact.

Your Smaily workflows must exist in Smaily first; the app lists them for you to map.

Step 4 — Campaign Intelligence (optional)

Connect Smaily Campaign Intelligence for personalised recommendations, browse tracking and intelligence-powered campaigns.

Until it is connected, the step opens with a short introduction: Campaign Intelligence uses your store's product, customer and order data to create personalised product recommendations for Smaily campaigns and automations, and it is an optional paid add-on (its monthly price is shown there) added to your regular Smaily monthly payment. Contact Smaily to activate it, or set it up later. Once you connect, the introduction is gone.

  • Paste the one-time setup link you received from Smaily (it looks like https://intelligence.smaily.com/setup/…) and press Connect Campaign Intelligence. The link can be used exactly once. Only an https link on intelligence.smaily.com is accepted.
  • Connecting starts the Products and Customers imports on their own: your whole catalog and all your customers go to Campaign Intelligence once, in the background, from the next background run (within 15 minutes). Each customer goes with their language. One notice says so as soon as you connect. To hold the imports back, press Stop import on that notice — it stops both — or Cancel on one import, before then: nothing is sent, and you can start the import later with Sync again. Cancelled after it began, the products or customers already sent stay in Campaign Intelligence and the rest are not sent. After the import, only changes are sent: a product you save, a stock change, an archived or deleted product, a new or changed customer. Once a night, at about 3:00 in your store's time zone, the app also sends the list of your active products — the products the Products import sends, each one's code and whether it is in stock, nothing else — so a stock change, an archived or a deleted product that did not get through is put right by the morning. A draft or archived product is not on the list, so it drops out of recommendations. A store with more than 50,000 products (each variant counts) does not send this list; the Event log says so.
  • Seed order history with the Orders import when you choose — safe to re-run, duplicates are impossible by design.
  • Optionally enable Browse tracking and Recommendation attribution (see Campaign Intelligence settings).

Step 5 — Forms & RSS

Add a newsletter signup form to your storefront and load your products into Smaily templates.

  • Newsletter signup block — in the theme editor (Online Store → Themes → Customize) add the Smaily newsletter form block to any section. Signups land in your Smaily contacts automatically.
  • Product RSS feed — a URL you paste into Smaily's template editor to load store products into campaigns. Configure it under Settings → Forms & RSS.

Step 6 — Overview

A summary of everything you configured. Contact sync, automations and storefront forms activate as their configuration becomes available.

Press Finish setup. (If your Smaily account isn't connected yet, you'll be asked to connect it before finishing.) You can revisit and change anything later under Settings.

Settings

Connection

Manage the Smaily account Smaily Connect sends through. Credentials are validated against Smaily before they are saved.

  • When connected you'll see Verified and Connected as USERNAME @ subdomain.sendsmaily.net.
  • Not connected with Package does not include API access means Smaily answered the saved account with code 227: its package has no API. Upgrade the package in Smaily, then re-enter the API password and press Update credentials to check the credentials again.
  • Update credentials changes the API user.
  • Disconnect stops contact sync until you reconnect.

If your store sells in more than one language, this tab also offers a multilingual mode (a separate Smaily account or workflow per language).

Contacts

Controls who is copied to your Smaily contact list and which fields are sent.

Sync contacts to Smaily — the master switch. When off, customers are no longer copied to Smaily, and everything this switch governs is hidden: the consent presets, the field selection and the Initial contact import. Turn it on and they appear. Existing contacts and Smaily automations are unaffected.

Contact synchronisation selection (consent presets)

Choose by your lawful basis for marketing email. The default is the consent-safe option.

  • Subscribers only (consent) (default) — only customers who opted in to email marketing are sent. Smaily unsubscribes are mirrored back to the customer's Shopify marketing consent (needs the Allow consent sync permission).
  • All customers (legitimate interest) — every customer is sent regardless of marketing consent. Requires a lawful basis.
  • Checkout opt-in only — only shoppers who accept marketing at checkout are sent (guests included). No account sync, no sync-back.

Fields

Email is always synced (it identifies the contact) and language is always synced (it routes contacts to the right account in multilingual setups). Pick any additional fields you want copied.

You can also sync guest-order email addresses. An automation never subscribes a contact again who unsubscribed in Smaily, in any mode — only the shopper's own new subscription in your store does that.

Automated letters

Two kinds of automation live here.

Store-run triggers

Map a store event to a Smaily workflow: Welcome, First order, Abandoned checkout. Abandoned checkout has a Send after delay (minutes of inactivity before a checkout counts as abandoned).

When Welcome fires. Welcome goes out when a customer's email-marketing subscription is switched on in your store — typically when they tick the newsletter box — and only once per contact: a customer who unsubscribes and later subscribes again is not welcomed a second time. Creating an account alone does not send it, so a customer added in the admin, imported, or created by another app without a marketing subscription is not welcomed. A subscription that reaches your store from Smaily (for example through a Smaily sign-up form) does not trigger the store's Welcome either.

If no workflows appear: none were found on your Smaily account (or Smaily couldn't be reached). Create the automations in Smaily first, then revisit.

If a workflow you previously mapped is later disabled in Smaily, it stays in the dropdown — labelled " — disabled in Smaily" — instead of silently disappearing, so saving this page never drops your setting. Re-enable the workflow in Smaily, or pick another one, then save.

Each trigger marks the contact — build segments on it. Every time one of these fires, it writes the moment it ran onto the contact in Smaily, so you can tell an automation-enrolled contact from someone who subscribed themselves:

  • welcome_automation_at
  • first_order_automation_at
  • abandoned_cart_automation_at

The value is the last run's date and time in UTC (2026-08-04 14:30:00) — it is overwritten on each run, and a trigger that has never fired for a contact leaves its field untouched. Use these in Smaily to include or exclude automation-touched contacts. The abandoned-checkout template field is_abandoned_cart is unchanged and still sent alongside.

The abandoned-checkout reminder carries the cart in ten numbered slots. Each slot has product_name_<1-10>, product_quantity_<1-10>, product_price_<1-10> and product_sku_<1-10>; a cart with more than ten products fills all ten and sets over_10_products to true, and any other cart sends over_10_products empty, so the field always describes the current cart. Every reminder writes all ten slots, with the ones this cart does not use sent empty — that is what clears the shopper's previous cart, so a second, smaller cart never shows leftovers from the first. Your Smaily template should therefore skip slots whose product_name_<n> is empty rather than render an empty row.

Who gets an abandoned-checkout reminder. Smaily adds an address it does not have as a subscribed contact when a workflow starts for it. So before each reminder the app reads the shopper's contact in Smaily and follows your contact synchronisation selection:

  • A shopper who unsubscribed in Smaily never gets one, whatever the selection.
  • All customers (legitimate interest) — every checkout with an email address gets one, except a customer who unsubscribed from email marketing in your store and did not tick the marketing box at this checkout.
  • Subscribers only (consent) — only a subscribed Smaily contact, a shopper who ticked the marketing box at this checkout, or a customer subscribed to email marketing in your store.
  • Checkout opt-in only — only a subscribed Smaily contact, or a shopper who ticked the marketing box at this checkout.

A checkout that gets no reminder is listed in the Event log as skipped, with the reason unsubscribed or no marketing consent. If Smaily or your store cannot be read at that moment, the reminder waits and is tried again like a failed send — it is never sent without the check. The reminder never subscribes anyone again: only the shopper's own new subscription in your store does that. A shopper who got a reminder before this check existed may already be a subscribed Smaily contact; such contacts carry is_abandoned_cart and abandoned_cart_automation_at, so a Smaily segment can find them.

Engine-run recommendation automations

These are triggered by Campaign Intelligence, not by a store event — the engine enrols each contact into the Smaily workflow you pick at the moment it predicts (a replenishment running out, a customer at risk of churning). Per automation you set:

  • an Enable toggle and the Smaily workflow to use;
  • a Cooldown — minimum days between two fires for the same customer (1–365);
  • Test mode — while on, emails go only to your Test addresses (comma-separated, up to 50), never to customers. Activate for real… turns test mode off as a request for real sends: when you save, the automation stays in test mode, and customers start receiving it once Smaily has enabled real sends. The save shows the status Waiting for Smaily to enable real sends on it; when you open the page later, it shows Test mode until Smaily has enabled real sends, and Active after that, with a banner saying real sends are on. An automation Smaily has already switched to real sends keeps them when you save.

A test-mode automation with no test addresses sends to no one until you add at least one address.

If the workflow you picked here is later disabled in Smaily, it stays in the dropdown — labelled "Workflow # — disabled in Smaily" — instead of silently disappearing, so saving this page never drops your setting. Re-enable the workflow in Smaily, or pick another one, then save.

Campaign Intelligence

While Campaign Intelligence is not connected, this tab opens with the same introduction as Step 4 of the setup — what it does, and that it is an optional paid add-on added to your regular Smaily monthly payment — with an Open initial setup button below it. It is gone once Campaign Intelligence is connected.

When connected, this tab shows the connection (with Test and Disconnect) plus:

  • Import existing data — seed history so recommendations have something to learn from (Products / Customers / Orders). Safe to re-run.
  • Browse tracking — captures product and category views to power similar products recommendations. Off by default; only runs when the visitor has granted analytics consent. Switching it off removes the tracking pixel from your store. If Shopify refuses that removal, the panel says so and offers Retry removal — until it succeeds the pixel is still on your storefront, but every event it sends is refused, so nothing is collected.
  • Recommendation attribution — credits store purchases to the recommendation that drove them. Required for any attribution numbers to appear; you enable it on your storefront with one click (it opens your theme editor with the embed pre-enabled — just press Save).

Test confirms the connection is healthy. Disconnect stops sending data and tells Campaign Intelligence that this connection ends (see What does Disconnect do?); reconnecting needs a fresh setup link. A connection with a fresh setup link, here or in the setup, starts the Products and Customers imports as Step 4 describes; an import that is already waiting or running is not started a second time.

If Campaign Intelligence has rejected this store, the tab says so instead — a red Rejected badge, the setup-link form right there, and a Test button for the case where Smaily has already restored access. The imports are hidden while this lasts, because nothing would reach Campaign Intelligence. See the red "connection rejected" notice.

Forms & RSS

Storefront newsletter block

Add the Smaily newsletter form block to your theme (Online Store → Themes → Customize). Signups land in your Smaily contacts automatically. The block inherits your theme's fonts and colours; configure the heading, button label and consent text in the theme editor.

Recommendation preferences block

Add the Smaily personalisation block (same theme editor) to a page of your choice — a privacy or account-related page works well. Logged-in customers see a Use my data for personalised recommendations checkbox and can opt out (or back in) at any time; visitors who are not logged in are asked to log in first. The choice is stored on the customer's Smaily contact and honoured everywhere: that customer's data is no longer used for profiling and personalised recommendations stop for them, while ordinary marketing emails continue unless they unsubscribe. All texts are editable in the theme editor.

Product RSS feed

A URL that loads store products into Smaily campaigns. The controls only shape the URL — nothing is saved. Adjust Collection, Limit (10–250) and Sort by, press Update URL, then copy the Feed URL into Smaily's template editor.

Storefront recommendations block

With Campaign Intelligence connected, the Smaily recommendations block shows a shopper up to 4 products recommended for them, as cards with your store's own product image, price, currency and language. A product that is not for sale is left out.

Add the block

  1. Open Online Store → Themes → Customize.
  2. Open the page where the recommendations should appear, for example the home page or a product page.
  3. Choose Add block in a section that accepts app blocks, or Add section, then the Apps tab, then Smaily recommendations.
  4. Press Save.

In the theme editor the block shows a short note instead of products. Without the block, nothing on your storefront changes. Shopify Canvas cannot add app blocks, so the block cannot be placed with Canvas — use the theme editor.

Heading

The block's only setting. Leave it empty to show Recommended for you in the shopper's language (Sinule soovitatud on an Estonian storefront); text you type is shown as you typed it.

Who sees recommendations

  • Only with marketing consent. The block asks for recommendations only when Shopify's customer privacy settings say the shopper allows marketing — where your store shows a cookie banner, the shopper accepted marketing in it. This applies to logged-in customers too. A shopper who accepts later on the page sees the recommendations without a reload.
  • Who is recognised: a logged-in customer, or a guest with a Smaily visitor token (from a Smaily email link, or from ticking email marketing at checkout). Anyone else sees nothing, and the block does not ask for them at all.
  • A logged-in customer who turned off personalised recommendations with the Smaily personalisation block sees nothing.
  • With no recommendations, the block shows nothing at all — heading included.
  • Your pages never wait for it. The block asks after the page has loaded; if no answer comes within 5 seconds, it shows nothing. Every logged-out shopper gets the same page, so your storefront's page caching is unaffected.

Importing existing data

What gets imported

Imports (also called backfills) seed your existing data so sync and recommendations have history to work from. There are four:

  • Contacts → your Smaily contact list (from Contacts).
  • Products, Customers, Orders → Campaign Intelligence (from Campaign Intelligence).

Each is a one-time bulk import that runs in the background — you can leave the page and it keeps going. It is safe to re-run: duplicates are impossible by design. Press Sync now the first time, Sync again afterwards. The Products and Customers imports are the exception: connecting Campaign Intelligence starts them for you (see Step 4).

Contacts — the master switch decides. The Contacts import obeys Sync contacts to Smaily (Settings → Contacts) exactly like the everyday sync does. With that switch off the import is not shown at all — turn it on and save, then it appears and can be run.

Orders — full history. By default Shopify only lets apps read the last 60 days of orders, so the Orders import seeds just that window. To import your complete purchase history, press Read all orders on the Import your full order history? prompt just above the Orders import and approve the one-time permission, then Sync again.

Reading the progress

While running you'll see Importing… with a count. For Products and Customers a progress bar fills toward the known total. Orders shows a running count until you grant Read all orders — once granted it also fills toward the known total. A Products or Customers import that connecting started shows Importing… with 0 and the line Waiting to start — the import begins within 15 minutes. until the next background run starts it (within 15 minutes). When it finishes, the status line means:

Status Meaning
Done — N synced. Everything imported cleanly.
Done — N of M synced. Finished; a few records were rejected (usually invalid data, e.g. a malformed email). The rest are in.
Stopped — N processed before an error. The import hit a real error and halted. See the error banner for what to do.
Cancelled — N processed. You cancelled it.

If some records failed you'll see a N failed — see Event log link — open it to see exactly which records and why.

Error messages & fixes

Smaily connection errors

  • Smaily rejected these credentials (401) — the subdomain, username or password is wrong. Double-check them in Smaily under Preferences → API.
  • Smaily refused the request because this account's package does not include API access — Smaily answered with code 227, A paid package is required. Your Smaily package has no API, so Smaily refuses every request before it looks at the credentials: they cannot be checked at all until then, and waiting does not help. Upgrade the package in Smaily, then enter the credentials again. An account that was already connected shows Not connected under Settings → Connection and on the Dashboard from the first request Smaily refuses this way; contact sync and automations stay stopped until the package includes the API. Once it does, re-enter the API password and press Update credentials: the app checks the credentials again, and the account shows Verified.
  • Could not reach Smaily — a temporary network issue; try again.
  • All three fields are required / Subdomain may contain only letters, numbers and dashes — fix the input and retry.

Campaign Intelligence errors

  • This setup link was already used — setup links are one-time. Ask Smaily for a fresh one.
  • Setup link not recognized — check you pasted the full URL.
  • The setup URL must be an https address on intelligence.smaily.com — the pasted link points somewhere else. Paste the link exactly as Smaily sent it; nothing was sent anywhere.
  • The engine answered with an address that is not an https address on intelligence.smaily.com, so the connection was not saved — the setup reply named another address, so nothing was stored. Contact Smaily support.
  • Campaign Intelligence did not respond — try Test again shortly; if it persists, contact support.
  • Campaign Intelligence rejected the stored API key — the key was revoked or rotated; see the next section for the recovery steps.

The red "connection rejected" notice on the Dashboard

A red notice at the top of the Dashboard reading Campaign Intelligence rejected this store's connection means the service is refusing this store outright: the API key was revoked, or the Campaign Intelligence account behind it was suspended or closed on Smaily's side. The Dashboard also drops out of Everything's running and shows Campaign Intelligence as Rejected while this lasts, and so does Settings → Campaign Intelligence.

What it means for your store:

  • Nothing reaches Campaign Intelligence, so recommendations stop refreshing and go stale.
  • Your Smaily email sending is unaffected — contact sync and automations to Smaily keep running.
  • Waiting does not help: the app stops retrying, because retrying cannot change the answer. Records that could not be delivered are listed in the Event log as failed.

How to clear it:

If Smaily tells you the account has been reinstated as it was, open Settings → Campaign Intelligence and press Test first — a successful test clears the notice on its own, with no new link needed.

  1. Ask Smaily for a fresh Campaign Intelligence setup link — info@smaily.com.
  2. Go to Settings → Campaign Intelligence, paste the new link into Setup link and press Connect Campaign Intelligence. There is no need to disconnect first — the new link replaces the old connection.
  3. In the Event log, press Retry failed ingest to re-send what was refused.

There is nothing to dismiss: the notice disappears by itself the moment Campaign Intelligence accepts the app again.

Permission prompts

Some features ask for a one-time Shopify permission. Approve it when Shopify asks, then retry the action.

  • Enable multilingual sends — grants read access to your store's languages/translations. Needed for multilingual sending and for the Products import. If a Products import shows needs a one-time permission to read your store's languages, press this, approve, then Sync again.
  • Allow consent sync — lets Smaily unsubscribes update the customer's marketing consent in Shopify (subscribers-only mode). Without it, sync still works — the unsubscribe just isn't reflected on the Shopify customer record.
  • Browse tracking permissions — if enabling browse tracking fails, grant the permissions when Shopify asks, then turn it on again.
  • Read returns — now part of the app's own permissions rather than an in-app button. If you installed before the returns update, Shopify shows a one-time approval screen the next time you open the app. Approving it lets Campaign Intelligence see which items came back, so a product a customer returned is not recommended straight back to them. Nothing breaks until you approve: a return the app cannot see is simply treated as kept. A line counts as returned only when the whole line comes back — refund one of three items on a line and the product still counts as kept, because the customer still has two of them.

Failed events & retry

The Event log lists what the app sent and any failures. If some records didn't reach their destination you'll see N events failed in the last 24 hours.

  • Use View only failed to narrow the list.
  • Retry failed ingest (N) re-queues failed records backed by the queue for another attempt.

What happens after a failed Smaily send. If Smaily refuses in a way that can never work — wrong or revoked credentials, a workflow that no longer exists, a rejected address — the send stops immediately and is listed as failed with a permanent_http_… reason, so you know it is waiting on a fix, not on time. The same holds when Smaily answers "invalid data" (code 203), because Smaily refuses the same data again: the send fails on its first attempt with a permanent_envelope_203 reason and Smaily's answer. Any other Smaily error code is retried as below. If Smaily is only busy or briefly unreachable, the send is kept and tried again by the background job — roughly 1 minute, 5 minutes, 15 minutes, 1 hour and 6 hours later (or exactly as long as Smaily asks), up to 5 attempts in total, after which it is given up and listed as failed. This covers welcome, first-order, abandoned-checkout and contact-sync sends alike, so a short Smaily outage delays those messages rather than losing them.

While a send is still waiting for its next attempt, the event log shows it as retrying with the time of that attempt, and it is NOT part of the failed-events number — a send that is still on its way has not failed. It is counted once, when it either succeeds or is finally given up on.

A delayed send is re-checked before it goes out: if the contact unsubscribed in the meantime, it is dropped rather than delivered.

Retry failed ingest covers Campaign Intelligence records only — they still hold their payload. Smaily sends retry themselves on the schedule above; there is no button for them.

FAQ & troubleshooting

Is it safe to re-sync?

Yes. Every import is safe to re-run — duplicates are impossible by design. Sync again re-runs from scratch, in the background, and survives you leaving the page.

How often does data sync?

Smaily Connect works at two speeds:

  • Near-real-time (webhooks) — when a customer is created or updated, changes their marketing consent, or places an order or checkout, Shopify notifies the app within seconds and it syncs straight away.
  • Every 15 minutes (background) — a scheduled job retries anything still waiting (Smaily sends a temporary failure held up, and records queued for Campaign Intelligence), processes abandoned checkouts, and mirrors Smaily unsubscribes back to Shopify.

One-time imports run when you press Sync now / Sync again and then continue in the background. Connecting Campaign Intelligence also starts the Products and Customers imports, with the next background run. There is no scheduled full re-import: after the import, only changes are sent — plus, once a night at about 3:00 store time, the codes of all active products with their stock (see Step 4).

Why do I see fewer orders than expected?

The Orders import currently sees only the last 60 days. That is a Shopify limit on the standard order permission the app uses — not a bug, and no data is lost.

Full order history needs an extended permission (read_all_orders) that requires Shopify's approval. We are requesting it; once granted, re-running the Orders import brings your full history in.

Is my whole customer list imported?

Yes. The customer import is not truncated — Shopify's privacy protections only redact individual fields, they never drop customers. If the number looks lower than you expect, note that a store with many orders often has far fewer unique customers (repeat buyers).

What does Disconnect do?

  • Disconnect Smaily — contact sync stops until you reconnect. Existing contacts and Smaily automations are untouched.
  • Disconnect Campaign Intelligence — data ingest stops and the app tells Campaign Intelligence that this connection ends. If your store has no other connection, Campaign Intelligence pauses the store: it issues no recommendations and sends none of its automated emails, and it keeps your store's data. Reconnecting needs a fresh one-time setup link and ends the pause.

Does uninstalling delete my data?

Uninstalling removes the app's access and, after Shopify's data-retention window, purges the app's local store data.

Your Smaily contacts and any Campaign Intelligence data persist — deliberately, so you can migrate platforms without losing your marketing history. Per-customer erasure is always available on request, and Shopify's standard privacy (redact) requests are honoured automatically.

On uninstall, as on Disconnect, the app tells Campaign Intelligence that this connection ends and deletes its Campaign Intelligence key: if your store has no other connection, Campaign Intelligence stops using your store's data at once and keeps it. If you install the app again, connect Campaign Intelligence with a fresh setup link. Your store's Campaign Intelligence data is deleted when you close your Smaily account.

Data & privacy

What data the app uses

  • Customer name and email — to sync contacts/customers to your Smaily account and (with Campaign Intelligence) as the per-customer identity.
  • Order and product data — to power automations and, when enabled, recommendations.
  • Anonymous browse events — only via Shopify's sandboxed Web Pixel, gated by Shopify's customer-privacy (consent) settings.
  • A visitor token for checkout subscribers — with Browse tracking on, a shopper who ticks the email-marketing box at checkout and has no Smaily visitor token yet gets a random token in a first-party cookie (smaily_rec_uid, 365 days; Safari keeps a cookie set this way for 7 days). It is sent with the order, so Campaign Intelligence recognises the shopper on a later visit. Without the tick no token is created, and an existing token is never replaced.

The app requests only name and email — no phone numbers, no postal addresses.

Deletion & GDPR

The app honours Shopify's mandatory privacy webhooks:

  • Customer data request — exports the customer's data.
  • Customer redact — deletes the customer's records from the app (their Event Log entries stay, with their address replaced by [erased], usually within hours) and asks Campaign Intelligence to delete the customer. Their contact stays in your Smaily account — remove it there if needed.
  • Shop redact — purges all of the store's local data.

See the full privacy policy for details.

Profiling opt-out (personalised recommendations)

Campaign Intelligence personalises recommendations by default for your synced contacts. GDPR gives buyers the right to object to this profiling separately from unsubscribing — the app keeps the two consents strictly apart:

  • Opting out of profiling stops that customer's data being used for personalised recommendations — Campaign Intelligence excludes them, so nothing they do is tied to them for profiling any more. Their data is retained but no longer used that way, and the choice is reversible. Marketing emails continue as before. It does not switch collection off: whether browse events are captured at all is governed by Shopify's customer-privacy (consent) settings and your Browse tracking switch.
  • Unsubscribing from marketing also stops profiling (the stronger signal).

Give buyers this control by adding the Smaily personalisation block to your storefront (see Settings → Forms & RSS above). The choice is recorded on the customer's Smaily contact with a timestamp (the GDPR proof) and enforced immediately in Campaign Intelligence.

Because profiling is on by default, your store's privacy policy should mention that purchase and browsing data is used to personalise recommendations — transparency is what makes the opt-out model lawful.

Security & isolation

  • Per-store isolation — every query, queued record and engine call is scoped to your store.
  • Secrets never reach the browser — API keys and passwords stay server-side; event records store ids only, never tokens or personal data.

The app is operated by Sendsmaily OÜ. Questions: info@smaily.com.