The messaging service Telegram is highly popular on the Russian speaking internet. With Facebook blocked and Twitter restricted, it’s also one of the last social network applications fully accessible to internet users in Russia.
In recent days, it has been a vitally important tool for documenting the Russian invasion of Ukraine – ordinary Ukrainians regularly post videos and photos attesting to the scale of destruction caused by the war. This material has allowed us to geolocate multiple attacks on civilians and establish the Russian military’s use of cluster munitions.
But the online media environment in Russia and Ukraine at present is highly volatile. Archiving content from the ground ensures it can still be used by researchers if a user deletes a post, if a channel is removed, or if an entire platform becomes inaccessible. For any type of internet content, links stop working over time, a phenomenon known as “link rot.” Archiving content can preserve it for years.
On February 25, the Telegram channel @MariypolCalling posted a video of Russian troop movements prior to the invasion. At time of writing, this post is no longer viewable due to a supposed moderation action.
However, we have a copy, because we archived it when we saw it – and you could too.
That’s because Telegram is one of the easiest communication platforms to archive, and one of the last that can preserve image metadata – a privacy risk to users, but often a boon to open source researchers. Telegram’s chat export formats also make it easy to translate an entire channel using Google Translate. The steps are simple even for non-technical users.
Telegram content can be useful in many other contexts. For example, Bellingcat has previously archived Telegram posts for multiple investigations into far-right groups and the QAnon conspiracy.
While the examples provided below focus on generic groups unrelated to any of the topics above, the principles described can be applied to any Telegram group or post.
How to archive a specific post, image, or video
The easiest way to archive media is by using the Telegram desktop application, available for Windows, Mac, and Linux. Then, you can save media by simply right-clicking on an image or video and clicking “Save as…”. If the image is attached as a file, it will contain all original metadata too.
You can do this with any message you are viewing in the Telegram application, even if you are not a member of the group. If you have the URL of a post in a format like https://t.me/euronews_tr/2011, pressing “VIEW IN CHANNEL” will allow you to open it in the Telegram application.
Additionally, it is wise to take a screenshot of the original post to save the timestamp, user, and to remember where you found the media item. Going further, you can save a complete copy of the entire post’s content and metadata by forwarding it to the Show Json Bot and saving the returned JSON content in a separate text file. JSON refers to a specific file format used for computer-readable information. This is the same content that might be returned by an application programming interface (API). Note that sensitive or private messages should never be forwarded to a bot. Saving metadata is useful as it contains as much information as possible from a post, including user IDs, the chat ID, and full timestamps.
How to archive an entire channel or group
Telegram goes above and beyond other chat platforms in featuring the ability to export an entire chat history, in both human readable and machine readable formats, including files and media. However, this feature is unavailable on Mac OS. The simplest way around this (if using Mac or Linux) is by using a Windows virtual machine. VMWare Fusion offers free licenses for non-commercial users and a guide on how to use it can be found here.
First, open a chat in the Telegram app by selecting it from your conversations or searching for it. Telegram chats can be private conversations, channels (where a single user broadcasts to an audience), or groups (where many users chat). Sometimes public channels are shared as online preview links. If you have one of these, in a format like https://t.me/s/[username] e.g. https://t.me/s/euronews_tr, clicking on the channel’s username will provide an option to open it in the Telegram application, assuming you have the platform installed on your computer. You can also use these preview URLs to find certain channels that are hidden from search results.
With a group or channel open (even one that you are previewing and are not a member of), click the menu button in the upper right corner and select “Export chat history”.
There are several export settings to choose from. Checking every box will export all media contained in the channel. Maximising the size limit captures as much media as possible, but note that it can increase the export time significantly.
There are two format options to choose from, HTML or JSON. The HTML format is designed to be human readable. It can be opened in a web browser and is most useful for manual review. The JSON format is designed to be machine readable, and is most useful when exporting data for further analysis.
You can also specify a date range, which can speed up the process if you only want a subset of the full channel archive. Finally, clicking on “EXPORT” starts the export process. For large chat histories, this can take up to several hours.
To view the export, open the messages.html file in your web browser.
Unfortunately, it is not currently possible to export channel comments with this technique.
How to translate Telegram messages
Telegram recently added a translation feature to the mobile application. Activate the feature by going to Settings > Language > Show Translate Button in the app. To translate a message, bring up a context menu by pressing and holding, then select the “Translate” option.
However, with this feature you can only translate one message at a time.
It is possible to translate an entire channel’s content at once by exporting a chat history as HTML (as described above) and opening it in Google Chrome. If Chrome does not offer to translate the page, you can request it by right-clicking and selecting “Translate to English” (or your preferred language.)
Scraping and APIs
For advanced users, Telegram’s API offers very open access to the platform as well, making it easy to archive messages and media, as well as user, channel, and group metadata. For Python developers, the Telethon API is full-featured and well-documented.
An alternative method of downloading Telegram messages is by using a non-API scraper. This approach can be faster than Telegram’s native export features, but it is only possible for public channels, not for chat groups. JustAnotherArchivist’s tool snscrape works well for this, and Bellingcat has forked it to support retrieval of media and channel forwarding information.
The Bellingcat Investigative Tech Team develops tools for open source investigations and explores tech-focused research techniques. It consists of Aiganysh Aidarbekova, Tristan Lee, Miguel Ramalho, Johanna Wild and Logan Williams. Do you have a question about applying these methods or tools to your own research, or an interest in collaborating? Contact us here.