> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).

# Generate reports

Export information from your Paddle account as CSV formatted spreadsheets to better understand your data and reconcile account activity.

---

Reports in Paddle let you export CSV formatted spreadsheets with your account data.

You can use them as part of your financial processes, like calculating revenue and analyzing trends. They're often used for working with data in other applications, like accounting or ERP solutions.

## Reports available

{% card-group cols=2 %}
{% card title="Transactions" url="/build/finance/reports/transactions" %}
Information about revenue received, past due invoices, draft and issued invoices, and canceled transactions.
{% /card %}
{% card title="Transaction line items" url="/build/finance/reports/transaction-line-items" %}
The same data as on transactions reports, but broken down by transaction line item.
{% /card %}
{% card title="Adjustments" url="/build/finance/reports/adjustments" %}
Information about refunds, credits, and chargebacks.
{% /card %}
{% card title="Adjustment line items" url="/build/finance/reports/adjustment-line-items" %}
The same data as on adjustments reports, but broken down by adjustment line item.
{% /card %}
{% card title="Products and prices" url="/build/finance/reports/products-prices" %}
Get information about products and prices.
{% /card %}
{% card title="Discounts" url="/build/finance/reports/discounts" %}
Get information about discounts.
{% /card %}
{% card title="Payout reconciliation" url="/build/finance/reports/payout-reconciliation" %}
Get complete transparency into how your payout amounts are calculated, and reconcile remittance reports.
{% /card %}
{% card title="Balance" %}
Get an overview of your account balance activity. Use payout reconciliation reports instead.
{% badge label="Deprecated" type="danger" /%}
{% /card %}
{% /card-group %}

## How it works

When you build a report, you can filter to choose the data that you include on it. Reports are always sorted by when they were last updated, and date range filters work using the date an entity was last updated. This is so you always see the most relevant data. For example, invoices created a few months before being issued and paid are included on reports when they're issued and paid.

{% callout type="info" %}
Data on reports may be delayed for up to 24 hours. This means you might not see entities created in the last 24 hours on your reports.
{% /callout %}

It might take a little while to generate a report, depending on the amount of data you include on it. The Reports screen in the Paddle dashboard updates when your report is ready, and you'll get an email to let you know, too. Reports are available to download for 14 days once generated.

### Reports are CSV files

Paddle produces reports as CSV (comma-separated values) files. CSV files are text files that use commas to separate cells of data. You can open CSV files with any spreadsheet app, like Microsoft Excel, Google Sheets, and Apple Numbers.

Your computer or device may open CSV files in your default text editor. If this happens, open your spreadsheet app and use **File > Open** to open it, or look for an import option.

Paddle exports CSV files using `UTF-8/Unicode` character encoding, with a comma as the delimiter.

## Generate a report

{% tabs sync="interaction-preference" %}
{% tab-item title="Dashboard" %}

{% instruction-steps %}

1. Go to **Paddle > Reports**.
2. Find the report you want to generate under the **Build reports** tab, then click {% mock-button %}Build report
3. Use the options to filter the data you want to include on your report. Check the [available filter options (below)](#generate-report-available-filters) to learn more about how they work.
4. When you're done, click Generate report
5. Look out for an email from Paddle, then click **Download report** in the email.

{% /instruction-steps %}

{% /dashboard-instructions %}

{% collapsible title="Available filter options" %}
Each report type has different filter options available. See the individual report pages for details on available filters:

- [Transactions](https://developer.paddle.com/build/finance/reports/transactions#report-filters.md)
- [Transaction line items](https://developer.paddle.com/build/finance/reports/transaction-line-items#report-filters.md)
- [Adjustments](https://developer.paddle.com/build/finance/reports/adjustments#report-filters.md)
- [Adjustment line items](https://developer.paddle.com/build/finance/reports/adjustment-line-items#report-filters.md)
- [Products and prices](https://developer.paddle.com/build/finance/reports/products-prices#report-filters.md)
- [Discounts](https://developer.paddle.com/build/finance/reports/discounts#report-filters.md)
- [Payout reconciliation](https://developer.paddle.com/build/finance/reports/payout-reconciliation#report-filters.md)

{% /collapsible %}

{% /tab-item %}
{% tab-item title="API" %}

Use the Paddle API to generate reports programmatically as part of your workflows.

Generate reports using the API in three steps:

1. **Create your report**  
   Build a request that includes the kind of report you want to generate and how you want to filter the data.
2. **Check the status of your report**  
   Wait for Paddle to generate the report.
3. **Download the report**  
   Send a request to get the download URL for the report, then download the file.

### Create report {% step=true %}

Send a `POST` request to the `/reports` endpoint to create a report.

Include `type` in your request to specify the report kind.

Optionally include `filters` to narrow the data. Each filter object needs `name` and `value`, and date filters can use an `operator` for date ranges. If omitted, defaults to data updated in the last 30 days.

The report is created as `pending` while Paddle processes your data. `rows` and `expires_at` are `null` until it's `ready`.

{% api-example method="POST" path="/reports" href="/api-reference/reports/create-report" %}

```json
{
  "type": "transactions",
  "filters": [
    {
      "name": "collection_mode",
      "value": ["manual"]
    },
    {
      "name": "updated_at",
      "value": "2024-04-15",
      "operator": "lt"
    },
    {
      "name": "updated_at",
      "value": "2024-01-01",
      "operator": "gte"
    }
  ]
}
```

```json
{
  "data": {
    "id": "rep_01hvgdhtthn1q35n79dgeqm3pv",
    "type": "transactions",
    "rows": null,
    "status": "pending",
    "filters": [
      {
        "name": "collection_mode",
        "value": ["manual"],
        "operator": null
      },
      {
        "name": "updated_at",
        "value": "2024-04-15",
        "operator": "lt"
      },
      {
        "name": "updated_at",
        "value": "2024-01-01",
        "operator": "gte"
      }
    ],
    "expires_at": null,
    "created_at": "2024-04-15T08:21:36.209Z",
    "updated_at": "2024-04-15T08:21:36.209Z"
  },
  "meta": {
    "request_id": "0774e52b-fcc3-4d7e-8047-b1b1a05a3f27"
  }
}
```

{% /api-example %}

### Check report status {% step=true badge="Optional" %}

Reports are created as `pending` initially, which means Paddle is processing them. During this stage, Paddle finds records that match your criteria and generates CSV files of your reports.

When Paddle has completed processing your report, its status changes to `ready`. At this point you can download a CSV file with your data.

You can check to see if a report is ready by:

- Polling the [`/reports/{report_id}`](https://developer.paddle.com/api-reference/reports/get-report.md) endpoint, checking to see if the status is `ready`.
- Subscribing to the [`report.updated`](https://developer.paddle.com/webhooks/reports/report-updated.md) webhook. Paddle sends a notification when the status for a report changes to `ready`.

### Download file {% step=true %}

Send a `GET` request to the `/reports/{report_id}/download-url` endpoint to get the download URL for the report.

The download URL expires after 72 hours.

{% api-example method="GET" path="/reports/{report_id}/download-url" href="/api-reference/reports/get-report-csv" %}

```json
{
  "data": {
    "url": "https://reports.paddle.com/transactions-10889-2024-04-15-08-21-37.csv"
  },
  "meta": {
    "request_id": "91899157-4d2a-432c-aa5b-041bb6266b55"
  }
}
```

{% /api-example %}

{% /tab-item %}
{% /tabs %}