Supported Markets
The generator supports 30+ individual European markets and predefined market groups. Markets determine which URLs your tests target and how test configuration is structured.
Multi-Country Market Groups
These groups target multiple countries at once, useful when your experiment spans several markets:
| Group Code | Name | Countries |
|---|---|---|
| SEBN | Benelux | Belgium (NL), Belgium (FR), Netherlands |
| SENA | Nordics | Sweden, Norway, Denmark, Finland |
| SEIB | Iberia | Spain, Portugal |
Single-Country Market Groups
Major markets with their own group codes:
| Group Code | Name | Country Code | URL Path |
|---|---|---|---|
| SEUK | UK | UK | /uk/ |
| SEF | France | FR | /fr/ |
| SEG | Germany | DE | /de/ |
| SEI | Italy | IT | /it/ |
| SEPOL | Poland | PL | /pl/ |
| SECA | Canada | CA | /ca/ |
Individual European Markets
All individual markets available in the autocomplete prompt:
| Country | Code | URL Path |
|---|---|---|
| Albania | AL | /al/ |
| Austria | AT | /at/ |
| Belgium (NL) | BE | /be/ |
| Belgium (FR) | BE_FR | /be_fr/ |
| Bosnia | BA | /ba/ |
| Bulgaria | BG | /bg/ |
| Canada | CA | /ca/ |
| Croatia | HR | /hr/ |
| Czech Republic | CZ | /cz/ |
| Denmark | DK | /dk/ |
| Estonia | EE | /ee/ |
| Finland | FI | /fi/ |
| France | FR | /fr/ |
| Germany | DE | /de/ |
| Greece | GR | /gr/ |
| Hungary | HU | /hu/ |
| Ireland | IE | /ie/ |
| Italy | IT | /it/ |
| Latvia | LV | /lv/ |
| Lithuania | LT | /lt/ |
| Macedonia | MK | /mk/ |
| Netherlands | NL | /nl/ |
| Norway | NO | /no/ |
| Poland | PL | /pl/ |
| Portugal | PT | /pt/ |
| Romania | RO | /ro/ |
| Serbia | RS | /rs/ |
| Slovakia | SK | /sk/ |
| Slovenia | SI | /si/ |
| Spain | ES | /es/ |
| Sweden | SE | /se/ |
| Switzerland | CH | /ch/ |
| United Kingdom | UK | /uk/ |
How Markets Map to Test URLs
Each market has a urlPath that is appended to your base URL. For example, with base URL https://www.example.com:
- Netherlands:
https://www.example.com/nl/ - Spain:
https://www.example.com/es/ - Belgium (FR):
https://www.example.com/be_fr/
The qa-links.config.js file constructs control and experiment URLs per market:
// Default pattern (auto-generated)
controlUrl: `${baseUrl}/${market.urlPath}/control-page/`
experimentUrl: `${baseUrl}/${market.urlPath}/experiment-page/`Environment Variable Overrides
You can override the default URL patterns with environment variables. The naming convention is:
CONTROL_URL_<MARKET_CODE>
EXPERIMENT_URL_<MARKET_CODE>Examples:
# Override Netherlands URLs
export CONTROL_URL_NL="https://www.example.com/nl/?at_preview_token=abc123"
export EXPERIMENT_URL_NL="https://www.example.com/nl/?at_preview_token=xyz789"
# Override Spain URLs
export CONTROL_URL_ES="https://www.example.com/es/?variant=control"
export EXPERIMENT_URL_ES="https://www.example.com/es/?variant=experiment"If an environment variable is not set, the generator falls back to the default URL pattern. The validateUrls() function warns about missing environment variables at test startup.
Market Resolution
The generator resolves market input in this order:
- Market group code (e.g.,
SEBN) - resolves to all countries in the group - Individual country code (e.g.,
NL) - resolves to that single market - Custom input - treated as a custom market with the input as both code and URL path
This means you can use the generator with markets not in the predefined list by typing a custom market code.
Usage in Tests
Markets are available in your test configuration via experimentConfig.markets:
import { experimentConfig } from '../config/index.js';
// Iterate over all markets
for (const market of experimentConfig.markets) {
console.log(market.code); // 'NL'
console.log(market.urlPath); // 'nl'
console.log(market.name); // 'Netherlands'
}
// Get a specific market
const nl = experimentConfig.getMarket('NL');