Important
This python script doesn't export photos and realmojis from the social media platform BeReal directly for that, you have to make a request to the BeReal. See the how to guide further down.
This python script processes the data from the BeReal export and exports the images and videos with comprehensive metadata, including:
- Date and time when the photo/video was taken (in the correct timezone)
- GPS location data (if available)
- Multiple date fields for compatibility with various photo management apps
All exported files (images and videos) are automatically enriched with this metadata using ExifTool so you can move your old BeReals to Apple Photos, Google Photos, Immich, and others.
Tip
You can also save your BeReals as a BeReal-style composite images using the --composite flag.
Note
Shout-out to berealgdprviewer, an open-source, privacy-focused tool for exploring and analyzing BeReal's GDPR-compliant data exports. If you're looking for a tool to quickly view all your BeReal data and statistics, this is the tool for you. Repo: casungo/bereal-gdpr-explorer-zip
-
Clone the repository:
git clone https://github.com/TeenBiscuits/BeReal-Export-Manager cd BeReal-Export-Manager -
Install the
uvpackage and project manager if you haven't already:# macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
See the uv docs for more information.
-
Create a virtual environment and install dependencies:
uv venv source .venv/bin/activate # Or on Windows: .venv\Scripts\activate uv pip install -r requirements.txt
-
Ensure you have
exiftoolinstalled on your system and set it up as aPATHvariable. You can download it here or:# On macOS brew install exiftool # On Ubuntu/Debian sudo apt install exiftool
BeReal exports store timestamps in UTC (...Z). This script converts them to local time using the GPS location when available, and otherwise falls back to --fallback-timezone (default Europe/Madrid). Filtering via --timespan / --year is also done in this converted local time.
If you want BeReal-style merged images (selfie overlaid on the main photo), enable --composite.
Some BeReal exports include a conversations/ folder (others don’t). If it’s present, the script will export those images too. If chat_log.json is present, its timestamps are used; otherwise file modification time is used. If the folder is missing, conversations are automatically skipped.
Exports can run in parallel via --max-workers.
The script automatically embeds metadata into all exported files:
DateTimeOriginal- When the photo was takenCreateDate- File creation dateModifyDate- Last modification dateGPSLatitude/GPSLongitude- Location coordinates (when available)
CreationDate- When the video was takenCreateDate- File creation dateModifyDate- Last modification dateGPSLatitude/GPSLongitude- Location coordinates (when available)
This ensures your exported BeReal memories are properly sorted and organized in photo management apps like Apple Photos, Google Photos, and others.
To request your data from BeReal, use the in-app help section to submit a GDPR request for a copy of your info, and BeReal will send a download link to your messages, containing your photos (in WebP format) and profile data in JSON files. You can find this process under Profile > Settings > Help & Support > Other > Contact Us, then request your data, they will replay shortly after with two links:
- The Analytics Data (.json.gz)
- The Media Archive (.zip)
Warning
Before runing the script move the Media Archive Zip to the root of this project and extract it.
Make sure your virtual environment is activated, then run the script within the BeReal export folder:
source .venv/bin/activate # On Windows: .venv\Scripts\activate
python bereal_exporter.py [OPTIONS]Note
RealMojis are optional (--realmojis). My export had incomplete RealMoji metadata, so it is disabled by default.
Tip
If you have a good computer use the script with --max-workers 8 or more, for a better performance.
-v, --verbose: Explain what is being done.-t, --timespan: Exports the given timespan.- Valid format:
DD.MM.YYYY-DD.MM.YYYY. - Wildcards can be used:
DD.MM.YYYY-*.
- Valid format:
--exiftool-path: Set the path to the ExifTool executable (needed if it isn't on the $PATH)-y, --year: Exports the given year.-p, --out-path: Set a custom output path (default is./out).--bereal-path: Set a custom BeReal path (default./)--fallback-timezone: Fallback timezone name (defaultEurope/Madrid).--no-gps-timezone: Don't determine timezone from GPS; always use--fallback-timezone.--max-workers: Maximum number of parallel workers (default4). Use--max-workers 1to disable parallelism.--composite: Create BeReal-style composite images (_composited.webp).--no-memories: Don't export the memories.--no-posts: Don't export the posts.--realmojis: Export realmojis (optional; disabled by default).--no-conversations: Don't export conversation images.
-
Export data for the year 2022:
python bereal_exporter.py --year 2022
-
Export data for a specific timespan:
python bereal_exporter.py --timespan '04.01.2022-31.12.2022' -
Export data to a custom output path:
python bereal_exporter.py --out-path /path/to/output
-
Specify the BeReal export folder:
python bereal_exporter.py --bereal-path /path/to/export
-
Use portable installed exiftool application:
python bereal_exporter.py --exiftool-path /path/to/exiftool.exe
-
Export memories only:
python bereal_exporter.py --no-posts
-
Export posts only:
[!TIP] In my experience, the posts folder contained all my bereals and was redundant with the memories folder, so this would be the most useful command for me, but check how your export was done.
python bereal_exporter.py --no-memories
-
Create BeReal-style composite images:
python bereal_exporter.py --composite
-
Export faster with more workers:
python bereal_exporter.py --max-workers 8
-
Force a specific fallback timezone (don’t use GPS):
python bereal_exporter.py --no-gps-timezone --fallback-timezone Europe/Madrid
-
Export conversations only:
python bereal_exporter.py --no-memories --no-posts
The script creates an out directory (or custom path specified with -p) containing:
memories/- Front and back camera images from your BeReal memories, plus BTS (behind-the-scenes) videosposts/- Primary and secondary camera images from your BeReal posts, plus BTS videosrealmojis/- Your RealMoji reactions (only when--realmojisis enabled)conversations/- Conversation images (when present in the export)
All files are named with the format: YYYY-MM-DD_HH-MM-SS_[type].[ext] and include embedded metadata for proper date/location sorting in photo apps. If you enable --composite, you’ll also get *_composited.webp images (for posts/memories, and for conversation image pairs).
By default, BeReals are saved as two separate photos, one from the front camera and one from the rear camera. Both photos share the same metadata and are at their maximum resolution. If you prefer to also save a merged image, run with --composite to generate *_composited.webp files.
Some BeReal exports do not include conversations/ data. In that case, conversation export is skipped automatically.
RealMoji data can be incomplete/missing metadata depending on your export. For that reason RealMojis are disabled by default; enable them with --realmojis if your export supports it.
The reposts you made are not included when you request your data, since they were not your posts, they were the posts of another person who tagged you, so it is in their account not yours and therefore is their property not yours, so the GDPR article does not apply.
Note
Timezone conversion, composite image generation, and parallel export are inspired by SoPat712/BeReal-Export-Manager shout-out for his amazing work.
This project is licensed under the MIT License. See the LICENSE file for more details.