---
title: "Linkbreakers + Loops: sync QR code contacts to Loops mailing lists"
description: "Connect Loops with an API key and every person who scans your QR codes and gives their email becomes a Loops contact, added to the mailing list you choose, with their name and form answers in contact properties. Consent decides whether a new contact is subscribed. Setup, what is synced, and the Assistant and MCP tools."
canonical: "https://linkbreakers.com/help/article/linkbreakers-loops-integration-sync-qr-code-contacts-to-mailing-lists"
last-updated: 2026-11-09
---

# Linkbreakers + Loops: sync QR code contacts to Loops mailing lists

> Connect Loops with an API key and every person who scans your QR codes and gives their email becomes a Loops contact, added to the mailing list you choose, with their name and form answers in contact properties. Consent decides whether a new contact is subscribed. Setup, what is synced, and the Assistant and MCP tools.

:::try-ai-prompt {"prompt":"Connect Loops with my API key, add synced contacts to my Product updates mailing list, and use my form's Consent field as their marketing consent","description":"Connect Loops with the Assistant.","target":"assistant"}:::

## Short answer

Linkbreakers syncs the people who scan your QR codes to Loops directly. In the dashboard, open **Integrations**, pick **Loops**, paste a Loops API key and select **Connect**. From then on, every person who goes through one of your links or QR codes and whose email Linkbreakers knows, for example after a form, is created or updated as a Loops contact, with their first and last name and form answers, and added to the Loops mailing list you choose, ready for your loops and campaigns.

No Zapier, Make or webhook is needed. The integration is available on every plan.

## Quick summary

- Connect once per workspace with an API key from **Settings > API**
- Contacts are created or updated, matched on email
- First name, last name and form answers (as contact properties) are filled in
- Optionally added to one mailing list
- Marketing consent decides whether a new contact is subscribed; an existing contact keeps their status
- Visitors known only by phone are not synced: Loops contacts need an email
- Also set up from the Assistant, the MCP server or the REST API

## How it works

A contact is synced when a visitor goes through a step of a link's workflow and Linkbreakers knows their email. That is usually right after a [form](/help/article/how-to-create-a-form), but it can also come from the chat bot or any step that saves visitor data. Linkbreakers sends the contact to Loops from its servers, once per step, at the moments the connection covers (all of them by default).

Linkbreakers first tries to create the contact. When Loops says the email already exists, it updates that contact instead, without touching their subscription. So the subscription is only ever set for a new contact.

## Connect Loops

1. In Loops, open **Settings > API** and select **Generate key**.
2. In Linkbreakers, open **Integrations** in the dashboard and pick **Loops**.
3. Paste the key in **Loops API key** and select **Connect**. Linkbreakers checks it against Loops before storing it.
4. Under **Add contacts to a mailing list**, choose the mailing list, or **No mailing list: contacts only**.
5. Set the options and the delivery setting below, then save.

The key is encrypted when it is stored and never shown again; the page shows the Loops team name.

## What gets synced

| Linkbreakers | Loops |
|---|---|
| Email | Contact email (the match) |
| First name, last name | `firstName`, `lastName` |
| Form answers and other visitor data | Custom contact properties with the same key, or the one you map them to |
| The mailing list you chose | Added to the contact's mailing lists |

Loops asks for custom properties to be created before values are sent to them. Create them in Loops under **Audience > Contact properties**, with the same keys as your form fields (text, number, true or false, or date), or map an answer to a property on the Loops page. **Test connection** lists the property keys Linkbreakers can write to. Loops' own properties, such as `email`, `subscribed` or `userGroup`, are never written from an answer.

## Marketing consent in Loops

Choose the answer where people agree to hear from you under **Marketing consent**: the **Linkbreakers consent** (a Consent field on your form, or the marketing consent goal of the [chat bot](/help/article/how-to-add-an-ai-chat-bot-to-a-qr-code)), or any other answer, such as a checkbox of your own.

- **With a consent answer chosen**: a new contact who said yes is created subscribed; one who did not is created not subscribed
- **With no consent answer chosen**: new contacts get Loops' default, which is subscribed
- **An existing contact keeps their subscription** either way, so someone who unsubscribed is never subscribed again

You can also tick **Add to the mailing list only those who consented**. Loops has double opt-in only on its own forms, never through the API, and has no tags, so neither option is shown for Loops.

## Which visitors and which links

The Loops page has the same three settings as the other Linkbreakers integrations:

- **Where**: every link, or only some links, directories and tags
- **When**: the moments of a visit (Entry, Interaction, Routing, Exit), or specific steps
- **What is sent**: all visitor data, only some, or just the visit. Email is always sent

Only visits by people are synced: bots, link previews and AI agents never become contacts. Visits past your plan's tracked visits allowance are not synced.

## What is not synced

- Visitors without an email, including those known only by their phone. They are skipped, not counted as failures
- The phone: Loops contacts have no phone of their own
- Answers with no matching custom property
- Anything back from Loops

## Set it up from the Assistant, MCP or the API

**Assistant**: in the dashboard, ask "Connect Loops with my API key and add new contacts to my Product updates list".

**MCP server**: an agent connected to the [Linkbreakers MCP server](/help/article/mcp-server-setup) has `contact_integration_connect`, `contact_integration_lists` (the mailing lists), `contact_integration_fields`, `contact_integration_update`, `contact_integration_test`, `contact_integration_get`, `contact_integrations_list` and `contact_integration_disconnect`, with the tool `CONTACT_TOOL_LOOPS`.

**REST API**, with a token that has the `integrations:write` scope:

```bash
curl -X POST https://api.linkbreakers.com/v1/integrations/contacts/CONTACT_TOOL_LOOPS/connect \
  -H "Authorization: Bearer $LINKBREAKERS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apiKey": "your-loops-api-key"}'

curl -X PATCH https://api.linkbreakers.com/v1/integrations/contacts/CONTACT_TOOL_LOOPS \
  -H "Authorization: Bearer $LINKBREAKERS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contactListId": "your-mailing-list-id", "options": {"consentAttributeKey": "$marketingConsent"}}'
```

## Limits and caveats

- **Email required.** Phone-only visitors are skipped
- **One Loops team and one mailing list per workspace**
- **Custom properties must exist in Loops** with a matching type, or the answer is left out
- **Without a consent answer, new contacts are subscribed**, as Loops makes them by default
- **No retries.** A contact Loops refuses is reported as the last error on the page, not sent again

## Frequently asked questions

### Are contacts who did not consent subscribed?

Not when you choose a consent answer: they are created not subscribed. Without a consent answer, Loops' default applies and they are subscribed.

### Will someone who unsubscribed in Loops be subscribed again?

No. An existing contact is updated without their subscription, so it stays as it is.

### Why are some answers missing in Loops?

The property does not exist in Loops, or its type does not match the answer. Create it under **Audience > Contact properties**, or map the answer to an existing property.

### What happens when I disconnect Loops?

Visitors stop being synced and the stored key is deleted. Contacts already in Loops stay there.

## Sources

- Linkbreakers Loops integration page, API and MCP tools, checked in the product on 2026-11-09.
- Loops API reference: https://loops.so/docs/api-reference

## Last reviewed

2026-11-09 by Laurent Schaffner.
