Skip to content

feat: add DoorDash connector#36

Open
letonchanh wants to merge 1 commit intomainfrom
connector/doordash
Open

feat: add DoorDash connector#36
letonchanh wants to merge 1 commit intomainfrom
connector/doordash

Conversation

@letonchanh
Copy link
Member

@letonchanh letonchanh commented Mar 12, 2026

Summary

Exports your DoorDash order history including restaurant names, items ordered, dates, totals, and delivery status.

Scopes

  • doordash.orders: Complete order history with restaurant names, items ordered, dates, totals, and delivery status

Build report

DoorDash Connector Report

Date: 2026-03-12
Agent: Claude Opus 4.6
Connector: doordash/doordash-playwright.js
Iterations: 1 (worked on first run)

Decision log

  • Started by researching existing DoorDash scrapers (tshddx/doordash-scraper, theodoremoreland/OrderDashboard) to understand available data patterns. Both rely on session cookies; one uses batch API calls, the other does DOM scraping from the order history page.
  • DoorDash uses Cloudflare bot protection, so automated login is unreliable. Chose manual browser login via showBrowser/promptUser as the primary auth path, with automated requestInput-based login as Tier 2 and env-var credentials as Tier 1. This supports email/password, Google Sign-In, and Apple Sign-In without any code changes.
  • For data extraction, used network capture (captureNetwork) targeting the getConsumerOrdersWithDetails GraphQL query that DoorDash fires when loading /orders. This returns structured JSON with order IDs, store names, dates, totals, items, and status.
  • Pagination is handled by scrolling to trigger additional GraphQL requests, with deduplication by order ID.
  • For order details, navigated to each /orders/{uuid} page and captured getConsumerOrder GraphQL responses to extract item-level data (names, quantities, prices) plus delivery address and status.
  • DOM scraping as fallback for both the order list and detail pages, in case GraphQL capture returns nothing (e.g., if DoorDash changes their API naming).

Surprises

  • DoorDash's order history page uses infinite scroll, not traditional pagination — had to capture network requests triggered by scrollTo(document.body.scrollHeight) rather than clicking "next page" buttons.
  • DoorDash login is multi-step: email field first, then a "Continue" button, then the password field appears on a second step. Standard single-form login code doesn't work.
  • The account has orders in both USD and CAD (user was in Canada for some orders), so the total field preserves the original currency string rather than converting.
  • Browser profile session reuse worked perfectly — after the first manual login, subsequent runs skipped login entirely.

Friction

  • The validate.cjs --contribute script expects to be run from within a git repo. Had to clone the data-connectors repo and copy files into it before contributing. Would be nice if the script handled this automatically.

What worked well

  • Network capture (captureNetwork) was the right approach — DoorDash's GraphQL responses contain clean, structured data with all the fields needed. No need to fall back to DOM scraping.
  • Browser profile persistence saved time on subsequent runs — session cookies from the first login carried over.
  • Three-tier login (session → automated → manual browser) meant the connector worked headlessly on re-runs after the initial manual login.
  • Validator caught everything needed and the schema generator produced a good skeleton that just needed description enrichment.

Generated by the vana-connect skill.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant