export_amazon_gift_cards_csv
Export Amazon gift card transaction history to CSV for tracking usage and reconciling balances across 16 regions.
Instructions
Export Amazon gift card transaction history to CSV file. CSV columns: Date, Description, Amount, Closing Balance, Type (credit/debit), Order ID, Claim Code, Serial Number, Region. Useful for tracking gift card usage and reconciling balances.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | Amazon region code | |
| output_path | No | Full path to save CSV file. Defaults to ~/Downloads/amazon-{region}-gift-cards-{date}.csv | |
| max_pages | No | Maximum pages of transaction history to fetch. Default: 10. Set to 0 for unlimited. |
Implementation Reference
- src/index.ts:1263-1317 (handler)Main handler for the export_amazon_gift_cards_csv tool. Validates region, extracts gift card data, formats for CSV, generates output path, exports to CSV, and returns result.case "export_amazon_gift_cards_csv": { const regionParam = args?.region as string | undefined; const regionError = validateRegion(regionParam, args); if (regionError) return regionError; const region = regionParam!; const currentPage = await getPage(); const outputPath = args?.output_path as string | undefined; const maxPages = (args?.max_pages as number) ?? 10; // Extract gift card transactions const giftCardData = await extractGiftCardData(currentPage, region, { maxPages, fetchAllPages: true, }); // Convert to CSV format using shared helper const csvData = formatGiftCardDataForCSV(giftCardData); // Generate output path const today = new Date().toISOString().split("T")[0]; const finalPath = getOutputPath(outputPath, "gift-cards", region, { endDate: today, }); // Export to CSV const exportResult = await exportGiftCardTransactionsCSV( csvData, finalPath, ); return { content: [ { type: "text", text: JSON.stringify( { status: exportResult.success ? "success" : "error", params: { region, maxPages, }, balance: giftCardData.balance.balance, transactionCount: giftCardData.transactions.length, filePath: exportResult.filePath, rowCount: exportResult.rowCount, error: exportResult.error, }, null, 2, ), }, ], }; }
- src/index.ts:439-464 (schema)Input schema definition and tool registration for export_amazon_gift_cards_csv, including parameters for region, output_path, and max_pages.{ name: "export_amazon_gift_cards_csv", description: "Export Amazon gift card transaction history to CSV file. CSV columns: Date, Description, Amount, Closing Balance, Type (credit/debit), Order ID, Claim Code, Serial Number, Region. Useful for tracking gift card usage and reconciling balances.", inputSchema: { type: "object", properties: { region: { type: "string", description: "Amazon region code", enum: getRegionCodes(), }, output_path: { type: "string", description: "Full path to save CSV file. Defaults to ~/Downloads/amazon-{region}-gift-cards-{date}.csv", }, max_pages: { type: "number", description: "Maximum pages of transaction history to fetch. Default: 10. Set to 0 for unlimited.", default: 10, }, }, required: ["region"], },
- Core helper function that navigates to the Amazon gift card balance page, extracts current balance, and fetches paginated transaction history.export async function extractGiftCardData( page: Page, region: string, options: GiftCardExtractionOptions = {}, ): Promise<GiftCardData> { const { maxPages = 10, fetchAllPages = true } = options; const regionConfig = getRegionByCode(region); const currency = regionConfig?.currency || "USD"; const url = getGiftCardPageUrl(region); // Navigate to gift card balance page await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 }); // Wait for the balance table to load await page .waitForSelector( 'table.a-bordered tbody tr, [data-testid="gc-balance"], #gc-balance', { timeout: 10000 }, ) .catch(() => {}); // Extract balance (from first row's closing balance, or dedicated element) const balance = await extractBalance(page, currency); // Extract transactions from all pages const allTransactions: GiftCardTransaction[] = []; let pageCount = 0; let hasMorePages = true; while (hasMorePages) { pageCount++; // Extract transactions from current page const pageTransactions = await extractTransactionsFromTable(page, currency); allTransactions.push(...pageTransactions); // Check if we should continue to next page if (!fetchAllPages) { hasMorePages = false; continue; } if (maxPages > 0 && pageCount >= maxPages) { hasMorePages = false; continue; } // Check for and click "Next" pagination button hasMorePages = await goToNextGiftCardPage(page); // Wait for the new page content to load await page.waitForTimeout(500); await page .waitForSelector("table.a-bordered tbody tr", { timeout: 5000 }) .catch(() => {}); } // Deduplicate transactions (in case of overlap between pages) const uniqueTransactions = deduplicateTransactions(allTransactions); return { balance, transactions: uniqueTransactions, region, }; }
- src/index.ts:621-635 (helper)Helper function to format extracted gift card data into CSV-compatible structure.function formatGiftCardDataForCSV( giftCardData: GiftCardData, ): GiftCardTransactionCSVData[] { return giftCardData.transactions.map((t) => ({ date: t.date, description: t.description, amount: t.amount, closingBalance: t.closingBalance, type: t.type, orderId: t.orderId, claimCode: t.claimCode, serialNumber: t.serialNumber, region: giftCardData.region, })); }
- src/tools/export-csv.ts:139-159 (helper)Helper function that writes the formatted gift card transactions to a CSV file using predefined columns.export async function exportGiftCardTransactionsCSV( transactions: GiftCardTransactionCSVData[], outputPath: string, ): Promise<ExportResult> { try { const csv = toCSVWithColumns(transactions, GIFT_CARD_CSV_COLUMNS); await writeFile(outputPath, csv, "utf-8"); return { success: true, filePath: outputPath, rowCount: transactions.length, }; } catch (error) { return { success: false, filePath: outputPath, rowCount: 0, error: String(error), }; }