ED API Tool
ED API Tool (edapitool) is a Python library and CLI for accessing the Elite Dangerous Companion API (CAPI). It allows you to extract data from the game, with a focus on fleet carrier inventory management and automated spreadsheet updates to make it easier to track/manage building planetary settlements, to affect the BGS simulation, upgrade your ship, and more. An example Google Spreadsheets template is provided that can be copied and used to track your carrier cargo and settlement progress with VLOOKUP formulas.
Features
- OAuth2 authentication with Frontier's auth service
- Fleet carrier data extraction
- Commodity and microresource order tracking
- Carrier locker inventory
- Export to CSV, JSON, spreadsheets
- Google Sheets integration - direct API export for VLOOKUP-based tracking
- Current-station market comparison - marks which commodities you still need are buyable at the station you are docked at
- Current ship cargo - reads your ship's hold from the game journal, with no Frontier login required
- Colony construction tracking - what a build still needs, read from the game journal: a shopping list ordered by what you are shortest of, with what each commodity pays
- Publishing into a corner of your own sheet - a generated block can go into a declared region of a tab you already maintain, beside your own columns, instead of onto a tab of its own. The region is cleared to its own bounds on every publish, so data that shrinks leaves nothing stale behind
- Live sheet updates -
edapitool servewatches the game journal and republishes the generated tabs as you play, and any construction regions you name, so the spreadsheet stays current without running anything by hand. It lists what it is covering at startup, so a partial setup does not look like a complete one - Your fleet carrier, kept current too -
serverefreshes the carrier's hold when you move cargo to or from it, and every fifteen minutes regardless, because another commander filling a buy order changes it without anything reaching your journal - Cargo filtering (exclude stolen/mission cargo)
Installation
pip install edapitool
Anything that writes to a spreadsheet needs the gsheets extra:
pip install "edapitool[gsheets]"
The quotes are necessary on zsh and some shells, which otherwise would try to expand the brackets.
From source
git clone https://github.com/djdarcy/EDAPITool.git
cd EDAPITool
pip install -e ".[gsheets]"
Setup
Before using ED API Tool, you need to register an application with Frontier:
- Go to https://auth.frontierstore.net/client/signup
- Register a new application (use
https://localhost/callbackas redirect URI) - Note your
client_id
See docs/frontier-oauth-setup.md for detailed instructions.
First-time authentication
# Authenticate and save client ID for future use
edapitool auth --client-id YOUR_CLIENT_ID
This saves your client ID to ~/.ed_capi_config.json so you don't need to provide it again.
An example: tracking settlement construction
Example spreadsheet -- feel free to make a copy and point the tool at it.
To clarify what the example sheet is, because it is the quickest way to misunderstand what the edapitool does. The sheet above is an example, not the goal of the project. The edapitool tool knows nothing about the sheet. What the tool does is publish plain data tabs, which can be referenced by whoever authored the sheet, to automate what the sheet calculates.
How it works, in one picture...
The tool currently writes three or four tabs and never touches anything else:
| Tab | What lands in it |
|---|---|
FreighterData |
every commodity on your fleet carrier, and what it cost |
ShipCargo |
what is in your ship's hold right now |
MarketData |
what the station you are docked at sells, and for how much |
| a region you name | what a construction site still needs — into a corner of a tab you already maintain |
Nothing in that list is interpreted. FreighterData is a list of commodities and numbers; it does not know you are building a settlement.
The meaning is added by the sheet, with ordinary formulas:
=VLOOKUP($B5, FreighterData!$B:$D, 2, FALSE) how much is on the carrier
=VLOOKUP($B5, ShipCargo!$B:$C, 2, FALSE) how much is in the ship
= required - delivered - on_carrier - in_ship how much is still to buy
That is the whole trick of making the Elite Dangerous in-game data available to a spreadsheet, and it is why the tool stays small. A column like "left to buy" exists only in the spreadsheet. Change your mind about what it should mean and you edit a formula -- the tool does not need to know and will not break.
What the example sheet does with that...
- Several settlements at once, one tab each, each bound to its own construction site. A totals tab rolls them up into a summary, so you can see what to buy for all of your builds in one place.
- A marker column that says, at a glance, whether the station you are standing in sells something you still need -- and how much of the shortfall it covers.
- Round-trip planning from your ship's capacity against what is still outstanding.
- Cost tracking, because the carrier data carries what you paid.
None of these extrapolations are in the tool. All of it is formulas you can read, change, or throw away.
Why this is handy if you want something completely different...
Getting at this data normally means somebody builds an entire website around it. That is an absurd amount of machinery between a player and numbers already sitting in a file they own on their computer.
So the same tabs serve any purpose you like:
- a trading sheet that ignores construction entirely and watches prices at stations you visit
- CSV or JSON instead of a spreadsheet,
--export csv,jsonneeds no Google account at all - a Python script, importing the same readers directly (Python API)
- your own tooling, since the journal data is on your disk and this just reads it
If you find yourself wanting the tool to understand your spreadsheet, that is usually an indicator to publish the data your column is derived from and let a formula do the rest.
Writing your own formulas is the way to do exactly that: what goes in which column of every published tab, what the tool clears and when, and the gotchas that are easier to read about than to discover.
Documentation
The commands, each on its own page:
| Page | What it covers |
|---|---|
| Your fleet carrier and commander | carrier, profile, exporting the hold to CSV / JSON / Google Sheets, what the API makes available, and its rate limits |
| The current station's market | market -- compare what a station sells against what your sheet still needs, and the marker column |
| Your ship's cargo | ship -- what is in your hold right now, with no Frontier login |
| Colony construction | construction -- what a build still needs, and publishing it into a corner of a sheet you already maintain |
| Keeping the sheet current | serve -- watch the journal and republish as you play |
| Using it as a Python library | the same data, importable |
| Writing your own formulas | what lands in which column of every published tab, what the tool overwrites, and the gotchas |
Setting up the two logins:
| Page | What it covers |
|---|---|
| Frontier OAuth setup | getting a client id, for anything that reads your carrier |
| Google Sheets setup | credentials, for anything that writes to a spreadsheet |
The shortest useful thing
edapitool ship # what is in your hold, no login needed
edapitool construction # what your build still needs
edapitool serve # keep the spreadsheet current while you play
Configuration Files
| File | Purpose |
|---|---|
~/.ed_capi_config.json |
Your settings: Frontier client ID, sheet_id, and any construction_regions you declare. Edited by hand, and the only copy of anything you type into it |
~/.ed_capi_tokens.json |
Frontier OAuth tokens |
~/.ed_gsheet_credentials.json |
Google API credentials |
~/.ed_gsheet_token.json |
Google OAuth tokens |
Development
# Install in development mode
pip install -e .
# With Google Sheets support
pip install -e .[gsheets]
# Lint code
flake8 APITool/
See APITool/README.md for module documentation.
Contributing
Contributions welcome! Please read CONTRIBUTING.md first.
Like the project?
Acknowledgements
License
Copyright (C) 2025-2026 Dustin Darcy
This project is licensed under the GNU General Public License v3.0 -- see the LICENSE file for details.
Metadata
Release files for edapitool 0.6.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| edapitool-0.6.3.tar.gz | 198.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| edapitool-0.6.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 337.2 kB
Release files / edapitool-0.6.3.tar.gz
| Download URL | edapitool-0.6.3.tar.gz |
|---|---|
| Size | 198.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e57ca40410a813596c0634b78dd5c8a4b96e6ecfe8e03569ef6f310dc9e87418
|
|
BLAKE2b-256 checksum How to use checksums |
13693da5826b3b76644da8dc97390fb036aa0bd86c4b4c57710ca0cb16b4fdf6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / edapitool-0.6.3-py3-none-any.whl
| Download URL | edapitool-0.6.3-py3-none-any.whl |
|---|---|
| Size | 139.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
647f8e9f1197ce3c3979e48c115bb1e7469dbc9b618114acac60d051ccb1ec91
|
|
BLAKE2b-256 checksum How to use checksums |
8dfc0296b7ad5b0c5e8b76c5239bf6d4d3bb6c122530fdcc7ad377aed3a6adf8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency log