Put your eSIM plans in front of travellers who are ready to buy
eSIM Guide compares travel eSIMs straight from each provider's own catalogue. Listed plans appear on every destination they cover, next to the brands travellers already know, updated automatically from the provider's feed.
- providers listed
- 51
- live plans
- 252,512
- destinations
- 228
Listed alongside
Telcomia
HiRoaming
Globie
MoodSIM
SimSmash
NXTL eSIM
Wanderly eSIM
Viasimo
Maya Mobile
YonoSIM
Bloomy eSIM
Skyalo
MyTravel eSIM
RedEx eSIM
Nomad
Connect Me Guru
PikaSIM
ZenSim
MicroESIM
ASIMGO
iroamly
RedteaGoAiralo
HorizonESIM
Esimatic
Global YO
GlobalPass
AirHub
Roamless
GigSky
YeSIM
UBIGI
eSimHero
Always Mobile
Orbit Mobile
VoyeGlobalSaily
Roamix
Rufly
Roaming4You
eSimCardSimify
PuraSIM
Stellar eSIM
JamboSIM
Simsima
LightSIM
AirPlans
esimagora
MyEsimGlobal
eSIMDesti
What we need from you
Two things are not optional. Without both, we cannot list your plans.
An affiliate programme
Your own, or through a network such as Impact, CJ or Awin. Commission on the sales we send is how eSIM Guide pays for itself. If yours is not live yet, tell us when it will be.
A plan feed or API
Something we can fetch automatically to keep your prices and plans current. It does not have to match our format below, but it has to be machine-readable: a spreadsheet sent by email or a pricing page on your website is not a feed.
How it works
- 1
Tell us about you
Fill in the form with your brand, your website and your affiliate programme.
- 2
Send us your feed details
A link to your plan feed or API, in the format below or in whatever format you already publish. We cannot consider an enquiry without it.
- 3
We come back with terms
We review your feed and your programme, then get in touch with our terms. If we go ahead, we write the integration and re-sync your catalogue automatically from then on.
Every field you send is another way to be found
Travellers cut thousands of plans down with filters, and a plan only appears under a filter when its feed says it qualifies. Leave a field out and you are not ruled out, you are just missing from that search.
networks[].nametypes: ["5G"]tethering: truetelephony.voice: truecanTopUp: trueinternetBreakoutsdataCapPer: "day"dataCap: 0promoEnabled: true
Ask to be listed
The plan feed format
Many of the providers we list already publish their plans in this shape, so if you have it, integration is quick. If you do not, there is no need to build it: any feed or API you already have will do.
Delivery
One HTTPS URL that returns your whole catalogue as a JSON array, one object per plan. Paging is fine if your catalogue is large.
Public, or protected by a key in a header or query string. We keep keys server-side and never publish them.
We fetch at most once an hour, so a price change reaches the site within that window.
Put your affiliate attribution on every link, or tell us which parameter to add and we will append it.
The minimum
Seven fields are enough to list a plan. Everything else is optional.
[ { "planName": "Spain 3GB 30 Days", "link": "https://example.com/esim/spain?ref=esimguide", "prices": { "USD": 4.5 }, "validity": 30, "dataCap": 3, "dataUnit": "GB", "coverages": [ { "code": "ES" } ] } ]
A full example
Two plans: a fixed allowance in one country, and a daily plan across several.
[ { "id": "es-3gb-30d", "planName": "Spain 3GB 30 Days", "link": "https://example.com/esim/spain?plan=es-3gb-30d&ref=esimguide", "prices": { "USD": 4.5, "EUR": 4.2, "GBP": 3.6 }, "validity": 30, "dataCap": 3, "dataUnit": "GB", "dataCapPer": null, "maxSpeed": null, "reducedSpeed": null, "coverages": [ { "code": "ES", "networks": [ { "name": "Movistar", "types": [ "4G", "5G" ] }, { "name": "Orange", "types": [ "4G", "5G" ] } ] } ], "internetBreakouts": [ { "country": "ES" } ], "tethering": true, "canTopUp": true, "eKYC": false, "telephony": null, "phoneNumber": false, "subscription": false, "subscriptionPeriod": null, "payAsYouGo": false, "hasAds": false, "newUserOnly": false, "promoEnabled": true, "capacityInfo": null, "validityInfo": "Install within 180 days of purchase.", "activationInfo": "Validity starts when the eSIM first connects to a supported network.", "additionalInfo": null, "apn": "internet" }, { "id": "eu-1gb-day-7d", "planName": "Europe 1GB/day 7 Days", "link": "https://example.com/esim/europe?plan=eu-1gb-day-7d&ref=esimguide", "prices": { "USD": 9.9, "EUR": 9.2 }, "validity": 7, "dataCap": 1, "dataUnit": "GB", "dataCapPer": "day", "maxSpeed": null, "reducedSpeed": 512, "coverages": [ { "code": "FR", "networks": [ { "name": "Orange", "types": [ "5G" ] } ] }, { "code": "IT", "networks": [ { "name": "TIM", "types": [ "4G", "5G" ] } ] }, { "code": "DE", "networks": [ { "name": "Vodafone", "types": [ "4G" ] } ] } ], "internetBreakouts": [ { "country": "NL" } ], "tethering": true, "canTopUp": false, "eKYC": false, "telephony": { "voice": false, "sms": true, "dialingCode": null }, "phoneNumber": false, "subscription": false, "subscriptionPeriod": null, "payAsYouGo": false, "hasAds": false, "newUserOnly": false, "promoEnabled": true, "capacityInfo": "1GB a day at full speed, then unlimited at 512 kbps.", "validityInfo": null, "activationInfo": null, "additionalInfo": null, "apn": null } ]
Field reference
The plan
idstring- Your stable identifier for the plan. Strongly recommended.
planNamestringrequired- The plan's name as customers see it on your site.
linkstring (URL)required- Where the buy button goes: ideally the plan's own checkout page, carrying your attribution for us.
prices{ [currency]: number }required- Price in each currency you sell in, in major units. For example USD, EUR and GBP.
validitynumberrequired- How many days the plan lasts once it starts.
Data and speed
dataCapnumberrequired- The data allowance. 0 means unlimited.
dataUnit"MB" | "GB"required- The unit of dataCap.
dataCapPer"day" | null- "day" when dataCap is a daily allowance that resets every day. null or absent when it is the total for the plan.
maxSpeednumber | null- Top speed in kbps, if the plan is speed-capped.
reducedSpeednumber | null- Speed in kbps once the allowance is used up, if data carries on at a reduced speed.
Where it works
coveragesarrayrequired- One entry per country the plan works in.
coverages[].codestringrequired- ISO 3166-1 alpha-2 country code, such as ES or JP.
coverages[].networksarray- The mobile networks the eSIM connects to in that country.
coverages[].networks[].namestring- Network name, such as Vodafone or Orange.
coverages[].networks[].typesstring[]- Technologies on that network: "3G", "4G", "5G".
internetBreakouts{ country: string }[]- The country or countries where traffic reaches the internet, which decides the IP address and latency users see.
Features
tetheringboolean | null- Whether the plan can be shared as a hotspot.
canTopUpboolean | null- Whether more data can be added to the same eSIM.
eKYCboolean | null- Whether buyers must verify their identity before the eSIM works.
telephony{ voice, sms, dialingCode } | null- Voice and SMS: { voice: boolean, sms: boolean, dialingCode: string }. null if the plan is data only.
phoneNumberboolean | null- Whether the plan comes with its own phone number.
subscriptionboolean | null- Whether the plan renews automatically.
subscriptionPeriodnumber | null- Days between renewals, for subscriptions.
payAsYouGoboolean | null- Whether data is billed by usage rather than as a bundle.
hasAdsboolean | null- Whether the plan is funded by ads, as some free plans are.
newUserOnlyboolean | null- Whether only first-time customers can buy the plan.
promoEnabledboolean | null- Whether discount codes can be used on the plan.
Free text
capacityInfostring | null- Anything about the allowance, such as fair use terms or speed after a daily cap.
validityInfostring | null- Anything about validity, such as how long the customer has to install the eSIM.
activationInfostring | null- When validity starts: on purchase, on install or on first connection.
additionalInfostring | null- Anything else a traveller should know.
apnstring | null- The APN, if customers need to set one.
What makes a feed easy to work with
- 1
Send null, or leave a field out, when you do not know the answer. false means the plan definitely does not do something. We show unknown as unknown, never as a no.
- 2
Give every plan an id that survives renames and price changes. Without one, a renamed plan looks like one plan removed and another added.
- 3
One row per plan you can buy. If a plan is sold in several durations, send one row per duration, each with its own price.
- 4
Prices in major units (4.50, not 450) at the amount the customer pays. Send every currency you sell in: your own local prices are better than our conversion.
- 5
Networks belong to the country they serve. On a multi-country plan, list each country's networks under that country, not one list for the whole plan.
Different format? Send it anyway.
Around half the providers we list send something else entirely: their own APIs, XML, CSV, affiliate network product feeds. As long as we can fetch it automatically, tell us where yours lives and we will take it from there.