Skip to main content
Use this guide for end-to-end DualEntry CLI workflows aimed at both developers and accountants. For installation and authentication, see the Quickstart Guide. For a complete list of resources and flags, see the Command Reference.

Prerequisites

Before running any workflow on this page, complete the steps in the Quickstart Guide:
  • The CLI is installed and on your PATH.
  • You’re authenticated (dualentry auth login) or have X_API_KEY set for CI/CD.
  • You have read access to the resources used in each workflow (invoices, bills, journal entries).

Review outstanding invoices

This workflow shows accountants and developers how to identify outstanding invoices and export them for further analysis.

Steps

Step 1 - List your invoices:
The default table output includes a Status column (e.g., posted, archived) so you can see at a glance which invoices are still outstanding. Step 2 - Discover available filters for the invoices resource:
The CLI is evolving, so the supported flags vary by version and resource. Confirmed filtering flags on journal-entries and bills (--start-date, --end-date, --status) may also be available on invoices. --help is the source of truth for your installed version. Step 3 - Pull the full details on a specific invoice:
Replace INV-ID with the ID from the list output. This shows all the detail for a single invoice: line items, customer, amounts, and status. Step 4 - Export to JSON for further analysis:
This dumps the full dataset as JSON and saves it to a file. From here you can feed it into Excel, a Python script, a BI tool, or whatever your team uses for reporting. The > operator redirects the output to a file instead of printing it to screen. Result: You have an exported JSON file of your invoice data, ready for downstream filtering and analysis with tools like jq, Python, or Excel.

Run a month-end journal entry review

This workflow shows accountants (and the developers supporting them) how to review every journal entry booked in a given month before closing the books.

Steps

Step 1 - List journal entries for the month:
The --start-date and --end-date flags are confirmed on journal-entries. This returns every journal entry booked in March. Step 2 - Fetch all pages if the list is long:
By default, the CLI returns one page of results. Adding --all fetches every page so you don’t miss anything, which is important during close when completeness matters. Step 3 - Spot-check a specific entry:
Replace JE-ID with the ID from your list. This pulls the full detail (debits, credits, accounts, memo, posting date) for a single journal entry so you can verify it’s correct. Step 4 - Export the full month for the workpaper file:
Save the complete dataset as JSON for your close binder, audit trail, or to share with your auditors.
Combining --all with --format json gives you a complete, machine-readable export. This is the fastest way to pull data out of DualEntry for external analysis.
Result: You have a complete, machine-readable export of every journal entry booked in the period, suitable for review, audit, or close documentation.

Automate bill status checks in CI/CD

This workflow shows developers how to build automation around accounts payable, for example, a scheduled job that checks for new posted bills and sends a notification to Slack, or a pipeline that reconciles bill data against another system.

Steps

Step 1 - Set up authentication for your pipeline: In your CI/CD environment (GitHub Actions, Jenkins, etc.), add X_API_KEY as a secret. The CLI uses this automatically when the environment variable is set; no browser-based login required.
Step 2 - Pull posted bills as JSON:
The --status and --format flags are confirmed on bills. JSON output makes it straightforward to parse programmatically. Step 3 - Pipe into jq or another tool: A list command returns an object, not a bare array. The shape is {items: [...], count: N}, where count is the total available rather than the number returned on this page. Reach into .items[] to iterate the records:
Inspect the raw output once to confirm the exact field names available on your version, then build your filter against those keys. Piping to jq '.[]' instead of .items[] iterates the object’s values rather than the records, which yields the array and the count as two results rather than one record per line. Step 4 - Add to a scheduled job: Wire the same commands into a scheduled CI workflow. The example below runs each weekday morning in GitHub Actions:
The install script method shown here requires Python 3.11+ on the CI runner. Add a setup step (e.g., actions/setup-python with python-version: '3.11') if your runner image doesn’t include it.
Result: A scheduled CI/CD job runs on the cadence you choose, pulls posted bills as JSON, and hands them to your notification or reconciliation logic. Note that jq '.count' reports the total matching the filter, which can exceed the records in the file. Add --all to the list command if the job needs every record rather than the first page.

Tips for all workflows

The tips below apply across every workflow on this page and will save time as you build your own.
  • Start with --help - the CLI is evolving fast and flags may change between versions. dualentry [resource] list --help is your source of truth.
  • Use --format json for anything automated - table output is great for humans but brittle for scripts.
  • Combine --all with JSON for complete exports - don’t assume the first page is everything, and compare .items | length against .count if you need to be sure.
  • --search works on every resource - it is the quickest way to narrow a list before adding more specific filters.
  • The CLI is read-heavy today - while create and update exist, the highest-value use cases right now tend to be listing, filtering, and exporting data.
Last modified on August 27, 2026