EPG grid visualization
Hero image showing an EPG grid in Undaplayer with multiple programs across time slots.
Size: 1200×675
Alt: “EPG grid in Undaplayer showing channels and time slots”
If you’ve ever opened an IPTV player and seen channel names but no program guide — no titles, no times, no synopses — you’ve hit an EPG problem. The Electronic Program Guide is the grid that tells you what’s on a channel right now and what’s coming up, and getting it to work reliably is the single most common configuration headache in IPTV.
This is the deep-dive on EPG. For the broader picture of how EPG fits into an IPTV player overall, see our IPTV Player Guide — this article assumes you’ve already read the basics there.
What is an EPG?
EPG stands for Electronic Program Guide. It’s the digital equivalent of a TV listings page in a newspaper — a grid showing which programs are on which channels, when they start and end, and ideally what they’re about. In a traditional cable or satellite box, the EPG is built in. In IPTV, it has to be fetched separately, and that’s where things get interesting.
Why EPG is separate from the playlist. Your M3U playlist lists channels and stream URLs. EPG is a completely different file — typically much larger — listing programs and times. The player downloads both and matches them via the tvg-id attribute (see below).
The XMLTV format
Almost every IPTV EPG uses the XMLTV format — an open XML standard with two types of elements: <channel> declarations and <programme> entries.
XMLTV FORMAT
<tv>
<channel id="news.uk">
<display-name>News UK</display-name>
<icon src="https://example.com/news.png" />
</channel>
<programme start="20260526200000 +0000"
stop="20260526210000 +0000"
channel="news.uk">
<title>Evening News</title>
<desc>Daily news roundup with regional coverage.</desc>
<category>News</category>
</programme>
</tv>
The channel id in the XMLTV file must match the tvg-id in your M3U playlist. If they don’t match, the player has no way to connect “News UK in your playlist” with “News UK programming data in the XMLTV”. This is the #1 cause of empty EPGs.
How tvg-id matching works
Every channel in your M3U should have a tvg-id attribute that maps to a channel ID in the XMLTV file:
M3U + XMLTV
In your M3U: #EXTINF:-1 tvg-id="news.uk" tvg-logo="...",News UK https://stream.example.com/news/ In your XMLTV: <channel id="news.uk"> <display-name>News UK</display-name> </channel> → The player matches "news.uk" on both sides and displays the EPG.
If the IDs don’t match exactly — case-sensitive, no extra spaces — no EPG. The most common mistakes:
- Playlist uses
tvg-id="NewsUK"but XMLTV usesid="news.uk" - Playlist has no
tvg-idattribute at all - Different XMLTV sources use different ID conventions (
BBC1.ukvsbbc.one.uk) - The XMLTV file is in a different timezone and times look wrong
tvg-id matching visualization
Vector diagram showing two boxes side by side: M3U playlist (with tvg-id=”news.uk”) and XMLTV file (with channel id=”news.uk”), connected by a green arrow labeled “MATCH”.
Size: 900×400
Alt: “Diagram showing tvg-id matching between M3U playlist and XMLTV file”
Where to find EPG sources
Some IPTV providers ship their EPG URL with your subscription — check the welcome email or dashboard. For free public channels, a few well-known sources cover most needs:
| Source | Coverage | Reliability |
|---|---|---|
| iptv-org/epg | Worldwide public broadcasts | High · open-source |
| epg.pw | 200+ countries, language-organized | High · community-maintained |
| Provider-shipped | Channels of your subscription | Variable |
| schedulesdirect.org | North America premium guide | High · paid service |
Combining multiple EPG sources
Single-EPG players force you to choose: a French EPG with great French coverage but no UK, or a global EPG with decent coverage everywhere but missing your favorite local channel. Undaplayer solves this with multi-EPG: combine up to five sources and decide which one wins per channel.
How priority works. When two EPG sources both have data for the same channel, Undaplayer uses the higher-priority source. You can reorder sources in Settings → EPG → Sources by drag-and-drop.
Why your EPG isn’t showing
In order of frequency, here’s why EPG fails to display:
- tvg-id mismatch. The most common. Check that your M3U
tvg-idvalues exactly match the XMLTVchannel idvalues. - EPG source unreachable. The XMLTV URL is dead or temporarily down. Try opening the URL in a browser — if it doesn’t return XML, the source is broken.
- Wrong timezone. XMLTV times include a timezone offset like
+0000. If your player doesn’t apply the offset, programs show at wrong times. - Stale cache. The player still has yesterday’s EPG. Force-refresh in settings, or wait for the next scheduled fetch (typically every 12-24 hours).
- XMLTV size limit. Some players cap parsing at ~50 MB. Huge XMLTV files (200+ MB) get truncated or rejected.
How to add an EPG source in Undaplayer
Here’s the exact 4-step process. The same logic applies to most Android IPTV players, with slightly different menu locations.
Settings → EPG Sources screen
Annotated screenshot of the “Add new EPG source” dialog in Undaplayer. Highlight the URL input field, the name field, and the Save button.
Size: 1200×800
Alt: “Undaplayer Add EPG Source dialog with URL and name fields”
-
Find an EPG URL matching your playlist
Identify an XMLTV source that covers the channels in your playlist. Common sources:
iptv-org/epg,epg.pw, or provider-shipped feeds. Copy the direct URL (it should end in.xml,.xml.gz, or no extension). -
Add the EPG URL in the player settings
In Undaplayer, go to Settings → EPG Sources → Add new source. Paste the XMLTV URL, give it a name (e.g. “iptv-org global”), and save. The player will start downloading immediately.
-
Verify tvg-id matching
Ensure each channel in your M3U has a
tvg-idattribute matching a channelidin the XMLTV file. If they don’t match, the EPG won’t display. Undaplayer shows a green dot next to channels with matched EPG data. -
Refresh and verify
Force-refresh the EPG (long-press the EPG menu) and check that programs are displayed correctly. Allow up to 24h for full guide coverage to load — XMLTV files can be hundreds of megabytes uncompressed.
If your EPG still doesn’t show after 24h, check the EPG diagnostic in Undaplayer (Settings → EPG → Diagnostics). It lists exactly which channels matched and which didn’t, with the unmatched tvg-id values displayed so you can fix them.
For the M3U side of the equation — how playlists define channels, attributes, and group categories — see our companion deep-dive M3U & Xtream Codes Reference. For the full installation flow on any device, head to the Setup Guide.
Ready to get started?
Unda Player is free, ad-free, and account-free. Get it on Google Play.
← Back to the full guide
IPTV Player Guide
What is an IPTV player, how M3U and Xtream Codes work, and how to choose one in 2026. A clear,…