A robust, state-based (Delta Sync) automation designed to extract transcripts and Artificial Intelligence metadata from Fireflies.ai and inject them directly into Obsidian as structured Markdown notes.
This project is a deeply refactored architectural fork, born from the excellent foundation built by Ritwik-28. The original repository served as a great starting point for connecting to the Fireflies API.
However, to scale the script's reliability to a production level, fundamental architectural changes were implemented in this version:
- From Time to State (Delta Sync): The original version relied on the current date to fetch meetings. If the host machine was offline for a weekend, meetings from that period were lost forever. This version implements a local "Ledger" (
synced_ledger.json). The script asks the API for the latest meetings and cross-references them with the local Ledger. What isn't on the disk, it downloads. No meeting is lost, regardless of downtime. - AI Extraction (GraphQL): The request was expanded to pull not just raw transcripts, but the
summaryblocks (Overview, Action Items, and Shorthands) generated by Fireflies' built-in AI. - Local Timezone Fix (BRT / UTC-3): Corrected the handling of Epoch timestamps received from the API, which previously defaulted to standard UTC, pushing late-night meetings to the next calendar day.
- Silent Execution: Designed to run entirely in the background via Systemd without human intervention.
- Duplicate Prevention: The local Ledger strictly prevents Obsidian from creating duplicate files.
- YAML Frontmatter: Natively prepares the generated notes for Obsidian's Dataview plugin.
- Secure Isolation: Code structured to run inside Python virtual environments (
venv), making it ideal for immutable systems like Fedora Atomic/Silverblue.
The following guide assumes deployment on a modern Linux environment (utilizing venv to avoid polluting the root system).
git clone https://github.com/marcosaugustoldo/fireflies-obsidian-sync-all.git
cd fireflies-obsidian-sync-all
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Create your environment variables file:
cp .env.example .env
nano .env
Insert your API key and the absolute path to your Obsidian vault:
FF_API_KEY="your_fireflies_api_key_here"
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault"
The initial execution will download all recent meetings and create the state file synced_ledger.json.
/path/to/your/venv/bin/python sync_fireflies.py
To ensure continuous, silent execution, create a Systemd user service.
1. Create the Service (~/.config/systemd/user/fireflies-sync.service):
[Unit]
Description=Fireflies.ai to Obsidian Synchronization
[Service]
Type=oneshot
WorkingDirectory=/absolute/path/to/the/script/folder
ExecStart=/absolute/path/to/your/venv/bin/python sync_fireflies.py
2. Create the Timer (~/.config/systemd/user/fireflies-sync.timer):
[Unit]
Description=Fireflies Sync Timer
[Timer]
OnCalendar=*-*-* 08..22:00:00
Persistent=true
[Install]
WantedBy=timers.target
3. Enable the Automation:
systemctl --user daemon-reload
systemctl --user enable --now fireflies-sync.timer
Your data pipeline is now fault-tolerant and will operate passively in the background.