---
title: "Route visitors by their phone's language"
description: "A new Language condition sends each visitor down the branch of the language their phone or browser is set to: French phones to the French page, Spanish phones to the Spanish one, everyone else to a fallback. Works on the first scan, with no delay, on every plan."
canonical: "https://linkbreakers.com/help/article/route-visitors-by-their-phones-language"
last-updated: 2026-10-30
---

# Route visitors by their phone's language

> A new Language condition sends each visitor down the branch of the language their phone or browser is set to: French phones to the French page, Spanish phones to the Spanish one, everyone else to a fallback. Works on the first scan, with no delay, on every plan.

## Short answer

Workflows have a new condition: **Language condition**. It reads the first language the visitor's phone or browser asks for and sends them down that language's branch, with an **Other languages** branch for everyone else. Each language covers all its regional variants, so French catches French from France, Canada, Belgium and Switzerland. It works on the first scan, adds no delay, and is available on every plan. See [how to route QR code visitors by their phone's language](/help/article/how-to-route-qr-code-visitors-by-their-phones-language).

## What we shipped

Until now, the only way to pick a page by language was a [country condition](/help/article/how-to-use-country-conditions), which guesses the language from where the visitor is. That guess breaks for tourists, for countries with several languages and for visitors on a VPN. The language a phone is set to is a much better answer to "which version of the page should this person read?", and every phone sends it with every visit.

### One branch per language

In the workflow editor's condition steps, choose **Language Condition**, then pick the languages you want a branch for. The step appears with one outlet per language and an **Other languages** outlet. Connect each one to its next step: a redirect, a form, a multi-link page, or anything else.

Languages are matched on their two-letter code (`fr`, `es`, `de`, `pt`, `zh`...), so regional variants such as `fr-CA`, `pt-BR` or `zh-TW` land in their language's branch. Visitors whose phone sends no language, or a language you did not list, take **Other languages**.

### Where it shows

- Each visit's activity timeline shows **Language Routing**, with the language detected and the branch it took.
- Slack notifications show the same.
- Webhooks carry it in the visit journey.

### In the API, MCP and the Assistant

Create the step with the event action `EVENT_ACTION_LANGUAGE_CONDITION` and a `language_condition` payload: a list of `languages` (`language_code`, lowercase ISO 639-1) and an `else_next_step_id`. Each branch is addressed by its language code, and the fallback by `else`, through `workflow_steps_connect` like every other condition. The Assistant can build it for you too.

## Limits and caveats

- Only the first language the phone lists is used.
- Languages are matched on their base code, not their region: chain a country condition to split `pt-BR` from `pt-PT`.
- Phones or in-app browsers that send no language take **Other languages**.

## Frequently asked questions

### Does it slow down the scan?

No. The language arrives with the visit itself, so there is nothing to wait for.

### What if a phone lists several languages?

The first one counts. It is the same one websites use to pick their language.

### Can I tell Brazilian and European Portuguese apart?

Not with this condition alone, which matches on the base language. Chain a country condition after it to split by region.

### Which plans include it?

Every plan.
