Skip to main content

alexa-sync

Two-way sync between your Alexa shopping list and a list in Apple Reminders, on macOS.

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.

Unofficial. Amazon has no public API for the shopping list anymore, so this uses the same private endpoints as the Alexa app. It can break whenever Amazon changes them. Use at your own risk.

Requirements

  • macOS 14+
  • uv (or pipx)
  • 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

uv tool install git+https://github.com/ow/Alexa-apple-reminders

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 not 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; 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.0

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.0
File Size Uploaded
alexa_sync-0.1.0.tar.gz 12.4 kB Details

Built distribution (wheel)

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

Total release size: 27.5 kB

Release files / alexa_sync-0.1.0.tar.gz

Download URL alexa_sync-0.1.0.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
4329c7a7f3ad668c415f51aef72eec17db783731a1bedd3f284b0c69e74267c9
BLAKE2b-256 checksum
How to use checksums
a1f40c7cafb87d7b36ed362c347bcff725f23b9c75cc293baad5cf34f6b5691f
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.0-py3-none-any.whl

Download URL alexa_sync-0.1.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
999dfb40e0ffeaf20204edc8875252ceac8efb8d01c1ef0ffb56979087416b0e
BLAKE2b-256 checksum
How to use checksums
24195e6688b85a1d10f2c8278d6212a5957c0a82668d5c6e2fbdab3c7cf263ad
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

0.1.1

2 release files

This release

0.1.0 This release

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