← back to Delivery Address Fix

references/instacart.md

44 lines

# Instacart adapter — PROVEN (2026-08-02)

Status: verified end-to-end on a live run 2026-08-02 (login → store → address
book), READ-ONLY (no account writes). Selectors below are confirmed.

## Auth flow (VERIFIED)

1. `https://www.instacart.com/login` → email field `input[type="email"]`
   (placeholder "Enter your email address"), submit `button:has-text("Continue")`.
2. Instacart uses passwordless **email OTP**: a 6-digit code, entered in
   `input[name="code"]` (aria-label "Enter code", maxlength 6). Auto-submits
   on fill (no explicit Verify click needed). Code arrives from
   `no-reply@instacart.com`, subject `NNNNNN is your Instacart verification
   code` — George-readable on the `steve-personal` account, and the code is
   **in the subject line** (no body parsing needed).
   - "Request a new code" has a ~10s cooldown.
3. No SMS gate and NO card-digit gate on this login (unlike UberEats).
4. Login lands on `https://www.instacart.com/store/?categoryFilter=homeTabForYou`;
   the current delivery address shows in the top-right header chip.

## After login (VERIFIED)

- Address book: `https://www.instacart.com/store/account/addresses`
  (direct nav works; also Account → Addresses). Shows every saved address as a
  row (street / city-state-zip) with a per-row **Edit** link, plus a green
  **"Add a new address"** button top-right.
- Live-order check: Orders page shows active deliveries. Address change on an
  ACTIVE order is generally NOT self-serve once shopping started — surfaces to
  care chat (do not attempt without explicit go).
- To SAVE a new address: click "Add a new address" → autocomplete search →
  select the exact VERBATIM match (per HARD RAIL #1) → supports unit + delivery
  instructions. New orders pick the address at checkout — confirm the default
  flips to the saved one.
- To SURFACE-BEFORE-DELETE: read the full list first (per HARD RAIL #3) and
  show the user any wrong-looking rows before removing anything.

## Quirks

- CDP port: 9225.
- Session is long-lived once the persistent profile exists — no bot wall on
  either the store or login pages (contrast DoorDash, which is Turnstile-walled).
- The store page renders a huge a11y skip-nav preamble in `innerText`; slice
  past it when parsing.