American Airlines
Check American Airlines AAdvantage balance, elite status, and loyalty points via Patchright. Handles email 2FA with 6-box code entry. Uses persistent browser profiles to skip 2FA on subsequent runs.
MCP get_skill({ skillId: "american-airlines-fd6ec35f" })Use this skill with your agent
Create a free account and connect via MCP
# American Airlines AAdvantage
Check AAdvantage award miles balance, elite status (Gold/Platinum/Platinum Pro/Executive Platinum), loyalty points, and million miler status. Uses Patchright (undetected Playwright fork) because AA blocks standard browser automation.
**Requires Patchright.** AA.com blocks vanilla Playwright and agent-browser.
## Prerequisites
```bash
pip install patchright && patchright install chromium
```
Or use Docker (no local install needed):
```bash
docker pull ghcr.io/borski/aa-miles-check:latest
# or build locally:
docker build -t aa-check skills/american-airlines/
```
## Usage
Pass credentials via environment variables or flags. If you use a secrets manager (1Password, Vault, etc.), inject them however you normally would.
```bash
# Environment variables
AA_USERNAME=your_aa_number AA_PASSWORD=your_password \
python3 scripts/check_balance.py --json
# Flags
python3 scripts/check_balance.py --username YOUR_AA_NUMBER --password YOUR_PASSWORD --json
# Docker
docker run --rm -e AA_USERNAME=your_aa_number -e AA_PASSWORD=your_password aa-check --json
```
## 2FA Handling
AA requires email verification on first login from a new device. The script waits up to 120 seconds for the code.
**You (the agent) do NOT have access to the user's email.** AA sends the 2FA code to the account holder's email address. When the script hits 2FA, you **MUST ask the user** for the 6-digit code. This is not optional. Do not try to read their email. Do not guess. Do not skip. Ask them, wait for the answer, then write it to the code file.
### Agent workflow
1. Run the script in the background (`nohup ... &`, `disown`)
2. Poll stderr for `"2FA REQUIRED"` to confirm the code was sent
3. **Ask the user** for the 6-digit code AA emailed them
4. Write the code to the code file: `echo "123456" > /tmp/aa-2fa-code.txt`
5. Wait for the script to complete and read stdout for the JSON result
### Persistent profiles (skip 2FA on repeat runs)
Use `--profile name` to save browser cookies. After the first successful 2FA, subsequent runs with the same profile skip 2FA entirely. Profiles are stored at `~/.aa-browser-profiles/{name}/`. Sessions last hours, not days.
```bash
# First run: will need 2FA
python3 scripts/check_balance.py --profile user1 --json
# Later runs: same profile, no 2FA
python3 scripts/check_balance.py --profile user1 --json
```
### Code input methods
- **Command hook:** Set `AA_2FA_COMMAND` to a command that blocks until it has the code, then prints it to stdout. The script runs this first before falling back to file polling.
- **File (default):** Script polls `/tmp/aa-2fa-code.txt` every 2 seconds. Write the 6-digit code there.
- **Direct flag:** `--code 123456` if you already have the code before running.
- **Custom file path:** `--code-file /path/to/code.txt`
## Output
```json
{
"username": "XXXXXXX",
"status": "completed",
"miles": 123425,
"elite_status": "Platinum Pro",
"loyalty_points": 180,
"name": "John Doe",
"aadvantage_number": "XXXXXXX",
"million_miler": 19328,
"member_since": "Aug 23, 2011"
}
```
| Field | Description |
|-------|-------------|
| `miles` | Award miles balance (redeemable) |
| `elite_status` | Gold, Platinum, Platinum Pro, or Executive Platinum (null if none) |
| `loyalty_points` | Current year loyalty points (reset March 1) |
| `million_miler` | Lifetime miles toward Million Miler status |
| `member_since` | Account creation date |
## When to Use
- Checking AA miles balance (AwardWallet doesn't support AA)
- Verifying elite status tier and expiration
- Tracking loyalty points toward next status level
- Comparing AA award availability against balance (combine with seats-aero)
## When NOT to Use
- **Booking flights.** Read-only. Does not modify anything.
- **Other airlines.** Use AwardWallet for airlines it supports.
## Implementation Notes
- AA uses 6 separate input boxes for 2FA codes (one digit per box). The script types each digit individually with auto-advance.
- Cookie consent banners are removed via JS before interacting with the Verify button.
- The Verify button requires Tab+Enter to submit (neither JS `.click()` nor Playwright `.click()` produce a trusted pointer event that AA's React app accepts).
- `headless=False` is required. AA detects headless browsers even with Patchright. Docker uses xvfb for a virtual display.
## Limitations
- **2FA on first use per profile.** No way around it. AA sends an email code. Set `AA_2FA_COMMAND` to automate code retrieval.
- **Session expiry.** Persistent profiles last hours, not days. Long gaps between runs may require 2FA again.
- **Headed mode required.** Opens a Chrome window locally. Use Docker for no popup.Related Skills
More skills in Web & Browser Automation
Accessibility Expert
Expert assistant for web accessibility (WCAG 2.1/2.2), inclusive UX, and a11y testing
Accessibility Runtime Tester
Runtime accessibility specialist for keyboard flows, focus management, dialog behavior, form errors, and evidence-backed WCAG validation in the browser.
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
Agent Browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
agent-browser core
Core agent-browser usage guide. Read this before running any agent-browser commands. Covers the snapshot-and-ref workflow, navigating pages, interacting with elements (click, fill, type, select), extracting text and data, taking screenshots, managing tabs, handling forms and auth, waiting for content, running multiple browser sessions in parallel, and troubleshooting common failures. Use when the user asks to interact with a website, fill a form, click something, extract data, take a screenshot, log into a site, test a web app, or automate any browser task.
Agentcore
Run agent-browser on AWS Bedrock AgentCore cloud browsers. Use when the user wants to use AgentCore, run browser automation on AWS, use a cloud browser with AWS credentials, or needs a managed browser session backed by AWS infrastructure. Triggers include "use agentcore", "run on AWS", "cloud browser with AWS", "bedrock browser", "agentcore session", or any task requiring AWS-hosted browser automation.
Explore Other Categories
Skills from other categories with shared topics
Alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty programs book which airlines, including bilateral partnerships outside alliances.
Amex Travel
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives.
Atlas Obscura
Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring plaques. Search by coordinates, get full details with descriptions and images.