Integration January 25, 2026 12 min read

EPG for IPTV: Integration Guide

Step-by-step guide to adding electronic program guide to your IPTV system. From choosing a source to debugging display.

Why IPTV needs EPG

Electronic Program Guide is a key element of user experience in IPTV. Without EPG, viewers only see a channel number without knowing what's on.

🧭

Navigation

Search for shows by genre and time

📋

Information

Descriptions, actors, ratings

Features

Reminders, recording timers, catch-up

🎯

Recommendations

Personalization based on metadata

EPG data sources

Option 1: Collect yourself

Negotiate with each broadcaster, receive data in different formats, normalize.

  • • Editorial team for data processing
  • • Develop parsers for each format
  • • Contracts with each broadcaster
  • • 6-12 months to launch

Option 2: EPG aggregator (recommended)

Connect to a ready-made service via API. EPG Service provides:

  • ✓ 4308 channels in unified format
  • ✓ Real-time updates
  • ✓ Metadata: genres, actors, posters
  • ✓ Launch in 2 weeks

Formats for IPTV

XMLTV — classic format

Supported by most IPTV middleware: Ministra (Stalker), Xtream Codes, MyTV Online and others.

XML (XMLTV)
<?xml version="1.0" encoding="UTF-8"?>
<tv>
  <channel id="channel1">
    <display-name>Channel One</display-name>
    <icon src="https://example.com/logo.png"/>
  </channel>
  
  <programme start="20260206180000 +0300" stop="20260206183000 +0300" channel="channel1">
    <title>Evening News</title>
    <desc>Daily news program</desc>
    <category>News</category>
    <icon src="https://example.com/poster.jpg"/>
  </programme>
</tv>

JSON API — modern approach

For custom applications and modern middleware, REST API with JSON is recommended:

JavaScript
// Fetch schedule via EPG Service API
const response = await fetch(
  'https://api.epgservice.ru/v1/schedules?channel_id=channel1&date=2026-02-06',
  { headers: { 'Authorization': 'Bearer API_KEY' } }
);

const data = await response.json();
// { channel: {...}, events: [...] }

Step-by-step integration

1

Get access to data

Write to our Telegram bot and get an API key in 1 minute. Free tier for development.

2

Map channels

Link channel IDs in your system with EPG channel IDs. Usually matching by tvg-id in m3u playlists is sufficient.

3

Configure import

Specify XMLTV URL in middleware or implement data retrieval via JSON API.

4

Verify display

Make sure the schedule displays correctly, time is accurate, descriptions and posters load.

Channel mapping example:

JSON
{
  "your_channel_id": "ch001",
  "epg_channel_id": "channel1",
  "name": "Channel One"
}

Common issues and solutions

Issue: EPG not displaying

Cause: Channel IDs in EPG and playlist don't match.

Solution: Check tvg-id in m3u and channel id in XMLTV.

Issue: Wrong time

Cause: Incorrect timezone in data or on device.

Solution: EPG Service returns time in UTC+3 (Moscow). Check timezone settings in middleware.

Issue: No posters

Cause: Middleware doesn't process <icon> tag in XMLTV.

Solution: Use JSON API or update middleware.

Best practices

💾 Cache data — don't request EPG on every channel switch
📅 Load in advance — fetch schedules 2-3 days ahead
🛡️ Handle errors — if EPG is unavailable, show cached data
🔔 Use webhooks — for instant updates without polling
📊 Monitor quality — track gaps and inconsistencies

Need help with integration?

EPG Service team will help set up integration for free. Get consultation and test access to API.

Contact team