What are KDP royalty parameters in DataDoe?
Amazon Ads reports retail sales of your books, not the royalties Kindle Direct Publishing (KDP) pays you. DataDoe does not fetch prices or royalties from KDP. You upload your royalty assumptions per book edition (ASIN), and DataDoe uses them to estimate author earnings from your ads.
KDP royalty parameters are available only for accounts whose Amazon Ads profile is an Amazon KDP author account. The Ads connection can be paired with Seller Central or Vendor Central or connected alone. The parameters belong to that Amazon Ads connection.
If KDP Royalties is disabled for an account that is a KDP author account, reauthorize Amazon Ads for it so DataDoe can read the current profile, or contact support.
Where do I upload KDP royalty parameters?
- Open Sellers & Vendors (opens in a new tab).
- Click KDP Royalties next to an account connected with an Amazon Ads KDP author account. Accounts connected with Amazon Ads alone are on the Ads tab.
- Upload a CSV file, or click Add ASIN to enter parameters for one book edition. Click a book in the list to edit its history. Click the trash icon of a book to delete all its royalty parameters, in every distribution channel.
What is the file format?
You can download a sample CSV (opens in a new tab).
| Column | Required | Description |
|---|---|---|
asin | Yes | Book edition ASIN (10 characters). Each format of a book has its own ASIN. |
book_format | Yes | EBOOK, PAPERBACK, HARDCOVER or AUDIOBOOK. |
from | Yes | Date the parameters apply from (YYYY-MM-DD or MM/DD/YYYY). The column is required; leave the value empty to apply the row to all history. |
distribution_channel | No | AMAZON (default) or EXPANDED_DISTRIBUTION (paperback and hardcover only). |
currency_code | No | Must be the marketplace currency. Defaults to it. |
book_work_id | No | Your own identifier that groups the editions of one book. |
list_price_ex_tax | See note | KDP list price after the applicable tax treatment. |
royalty_rate | See note | Royalty rate as a fraction, for example 0.7 for 70%. |
ebook_royalty_option | See note | SEVENTY_PERCENT or THIRTY_FIVE_PERCENT. eBooks only. |
delivery_cost_per_unit | See note | eBook delivery cost. Required for the 70% option. |
printing_cost_per_unit | See note | Printing cost of a print edition. |
estimated_royalty_per_unit | No | Your royalty per unit, for example from a KDP report. Empty means it is estimated with KDP rules. |
calculation_method | No | PROVIDED_PER_UNIT or KDP_RULE_ESTIMATE. Defaults from the values you provide. |
ku_page_rate | No | Kindle Unlimited royalty per page read (KENP) for ku_rate_month. eBooks only. |
ku_rate_month | No | Month of ku_page_rate (YYYY-MM). Required together with ku_page_rate. |
audio_royalty_per_unit | See note | Audiobook royalty per unit from your audio contract. Required for audiobooks. |
source_reference | No | Where the values come from. Defaults to the file name. |
DataDoe records where each row comes from: values entered in DataDoe (this file, the grid, the API or MCP) are stored as USER_CONFIGURATION.
How is the royalty per unit estimated?
When estimated_royalty_per_unit is empty, DataDoe estimates it with the KDP royalty rules:
- eBook, 70% option: royalty rate × (list price − delivery cost)
- eBook, 35% option: royalty rate × list price
- Paperback and hardcover: royalty rate × list price − printing cost
Audiobooks always use audio_royalty_per_unit. Values are calculated exactly, without rounding. Empty values stay unknown; they are never treated as 0.
How do effective dates work?
Like COGS, each row applies from its from date until the next row of the same ASIN and distribution channel. To change a price or rate, add a row with a new from date instead of editing the old one, so past ad performance keeps the parameters that applied at the time.
Re-uploading KDP royalty parameters
DataDoe matches each row on the account, ASIN, distribution channel and from date.
- Matching row → the parameters are overwritten with what is in the file.
- New row → the row is added.
- Rows not in the file → stay unchanged.
If any row in a file is invalid, nothing is saved. Fix the rows listed in the upload result and upload the file again.

