Skip to main content

Alexa x Apple Reminders Sync

Alexa is a terrible shopping list manager. Despite it being a core workflow, actually browsing the shopping list is poorly implemented in their app, and often forgets what it's doing when you are standing in the store. I wanted to be able to ask my Alexa at home to add items to the list, but not be forced to use Alexa's terrible mobile app when I am shopping.

This tool lets you use your Alexa devices to add/remove shopping items, but then use Apple Reminders on your phone/macOS to interact with that list. The tool runs in the background on a Mac, checking every 2 minutes for new items and syncs them in both directions.

How it works

Say "Alexa, add oat milk to my shopping list" and it shows up in Reminders a minute or two later. Tick it off in Reminders at the store and it's ticked off on Alexa too. Add something new via Siri to Reminders, and it appears in Alexa.

Requirements

  • macOS 14+
  • uv (or pipx)
  • The Reminders CLI tool: remindctl: brew install steipete/tap/remindctl, then remindctl authorize
  • An Amazon account with 2-Step Verification using an authenticator app (the login flow needs a code, not an SMS or push approval)

Setup

brew install steipete/tap/remindctl
remindctl authorize #Prompts for macOS Reminders access
uv tool install alexa-sync   # or: pipx install alexa-sync

alexa-sync login                     # email, password, authenticator code (one time)
alexa-sync doctor --list Groceries   # check everything is ready
alexa-sync run --list Groceries --dry-run   # preview the first sync
alexa-sync install --list Groceries  # sync every 2 minutes in the background

The Reminders list must already exist. --list defaults to Groceries.

Other commands: alexa-sync run (sync once), alexa-sync uninstall (stop the background job), install --interval 60 (change how often it runs, in seconds).

How it works

Amazon login. login registers your Mac as a "device" on your Amazon account, the same way the Alexa phone app does (via aioamazondevices). That returns a long-lived token, which is kept in your macOS Keychain. Your password and 2FA code are only used once to sign in and are never stored. The token is used to get fresh session cookies whenever needed. If it ever stops working you'll get a macOS notification asking you to run alexa-sync login again. To revoke it, remove the device under Manage Your Content and Devices on Amazon.

Sync. Each run reads both lists and compares them with what they looked like after the last sync, so it can tell which side changed:

  • Adds, check-offs, un-checks, renames and deletes go both ways.
  • If the same item changed on both sides between syncs, Alexa wins.
  • Items that are already completed when first seen aren't copied. This keeps years of old Alexa history out of Reminders.
  • On the first sync, items with the same name on both sides are paired rather than duplicated.
  • If a single pass would delete more than 5 items it stops and notifies you instead (override with --max-deletes).

Files.

What Where
Amazon device token Keychain, service alexa-sync
Sync state ~/Library/Application Support/alexa-sync/state.json
Log ~/Library/Logs/alexa-sync.log
Background job ~/Library/LaunchAgents/io.github.alexa-sync.plist

Only the default Alexa shopping list is synced. It has been tested with amazon.com, which seems to be where grocery lists are published regardless of location—it shows there for me despite being in Canada. Other Amazon regions should work, since the login library supports them, but are untested.

Development

uv run pytest
uv run alexa-sync run --dry-run -v

License

MIT

Metadata

Release files for alexa-sync 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for alexa-sync 0.1.1
File Size Uploaded
alexa_sync-0.1.1.tar.gz 13.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for alexa-sync 0.1.1
File Interpreter ABI Platform
alexa_sync-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 28.9 kB

Release files / alexa_sync-0.1.1.tar.gz

Download URL alexa_sync-0.1.1.tar.gz
Size 13.1 kB
Tags Source
SHA-256 checksum
How to use checksums
87e23620795b377e2be71f7df805463fbe494ed45a3436f7ed56d1d877abe949
BLAKE2b-256 checksum
How to use checksums
59ca09243fc8705791c044dc9970c67363fddcc3babd5a3715b7ad3f3a5579ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / alexa_sync-0.1.1-py3-none-any.whl

Download URL alexa_sync-0.1.1-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef06159b7a943b12760e9292ece8c7d912298c7504c2cd09474611e27eb2a4fb
BLAKE2b-256 checksum
How to use checksums
8c56f91ffdf59d2d6baa2d2a1f11ee784265926839ccc47f19e1471bc87e06fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page