rtcamp / stripe-xero-csv
Export Stripe's balance affecting transactions in a CSV file, recognisable by Xero Import CSV Statement feature.
Installs: 5
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 31
Forks: 0
Open Issues: 1
Type:project
pkg:composer/rtcamp/stripe-xero-csv
Requires
- daniel-zahariev/php-aws-ses: ^0.9.1
- league/csv: ^8.0
- stripe/stripe-php: ^5.1
- vlucas/phpdotenv: ^2.4
This package is not auto-updated.
Last update: 2025-10-12 07:41:54 UTC
README
The php script stripe-xero.php exports all Stripe balance affecting transactions into a CSV file recognisable by Xero Bank Account's import a CSV statement feature.
Currently it supports:
- Charges
- Refunds
- Payouts
Usage
Preparation
git clone https://github.com/rtcamp/stripe-xero-csv
cd stripe-xero-csv
composer install
Edit .env file to add correct Stripe API Key.
Finally run the script:
php stripe-xero.php
It will create a file stripe-xero-{date}.csv with all balance affecting transactions from your Stripe account.
Xero will skip duplicates during import so you need to worry about previously imported transactions appearing in CSV.
The script supports emailing CSV as attachment to predefined email address. This comes handy if you are running script as a CRON job.
As of now only Amazon AWS SES is supported.
You need to set values of following variables in .env file:
EMAIL_FROMEMAIL_TOAWS_ACCESS_KEYAWS_SECRET_KEY
Please make sure:
EMAIL_FROMaddress must be verified already in SES console.- You are using IAM API user to generate
AWS_credentials. SES SMTP credentials won't work.
crontab
Add a line like below for weekly emails @ Monday 10am.
0 10 * * 1 cd /path/to/stripe-xero-csv && /usr/bin/php stripe-xero.php >> stripe-xero.log 2>&1
Known Issues and Limitations
- Xero doesn't provide support for adding Stripe as a bank account. So we need to create a normal bank account with manual feed.
- Stripe doesn't provide Xero friendly statements. Xero supports many formats.
- Xero API doesn't have provision to insert bank statement lines. It's second most popular feature request pending from eternity i.e. 2009! This is main reason that you need to run this script locally and import CSV files manually.
TODO
- Add support to generate CSV for a specific duration. Something like "this month", "last month" should be enough to start with.