> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.fincome.co/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Pennylane integration mapping

![](https://storage.crisp.chat/users/helpdesk/website/-/6/2/0/e/620ea71851239000/pennylane_895psi.webp =100x100)
# Connecting to Pennylane

[Follow this guide](https://help.fincome.co/en/article/connect-my-pennylane-account-pz7875/) to establish the connection to the Pennylane API.
---
# Synchronized data

| **Entity** | **Key synchronized fields** |
| ---- |
| Customers | id, name, email, country, zip_code, customer_reference |
| Products | id, name |
| Prices | id, amount_excl_tax, currency (linked_to_product) |
| Subscriptions | id, linked customer, status, start and end dates, monthly_amount |
| Invoices | <p>id, status, date, number, customer<br>• Lines: linked_product, amount_excl_tax, VAT, currency, quantity, period, description</p> |
| Credit Notes | Extracted from the credit_notes attached to an invoice |
---
# How the integration works in detail

* Structured mapping: all entities are mapped field by field from the Pennylane structure
* Subscription detection: based on the billing templates (invoice_template.line_items)
* Amounts excl. tax and taxes: analyzed line by line, with conversion into the base currency
* Credit notes integrated: via invoice credit_notes, with the amount inverted
* Service periods: extracted automatically (period_start, period_end)
---
# Good to know

* Draft invoices (is_draft): not synchronized
* Discounts: not currently brought up (field forced to 0)
* Daily synchronization: every night automatically
* Data deletion in Pennylane: not propagated to Fincome
* Custom references: supported via the customers' reference field
* Incremental synchronization not supported: data must be extracted in full
---
# Integration overview

| Element | Detail |
| ---- |
| Integration method | OAuth 2.0 or Pennylane API key |
| Supported entities | Customers, Products, Prices, Subscriptions, Invoices, Credit notes |
| Synchronization frequency | Daily (at night) |
| Scope of the initial import | Data available via API |
| Synchronization method | REST API with pagination |
| Pennylane data deletion | Not supported |
---
# Data settings

| Behavior / Setting | How it works in Fincome |
| ---- |
| Customer country / Zip code | Detection via several fields in order of priority (country_alpha2, etc.) |
| Subscriptions | From the billing templates (template) |
| Amounts excl. tax / taxes | currency_price_before_tax, currency_tax fields |
| Credit notes | Inverted lines, with a structure identical to invoices |
| Discounts | Not available (brought up as 0) |
| Currency conversion | Based on currency and date |
| Billing periods | period_start, period_end extracted by Fincome |
---
# Technical mapping (Pennylane → Fincome)

### Customers

| Pennylane field | Fincome field |
| ---- |
| source_id | original_id |
| name | name |
| email | email |
| country_alpha2, billing_address.country_alpha2, delivery_address.country_alpha2 | country |
| postal_code, billing_address.postal_code, delivery_address.postal_code | zip_code |
| reference | custom_axis_field.reference |

### Products & Prices

| Pennylane field | Fincome field |
| ---- |
| source_id | original_id (product & price) |
| label | name (product & price) |
| price_before_tax | amount |
| currency | currency_code |

### Subscriptions

| Pennylane field | Fincome field |
| ---- |
| invoice_template.line_items\[].product_id | price_id |
| invoice_template.currency | currency_code |
| invoice_template.line_items\[].subscription_set_id | subscription_set_id |
| start | subscription_start_date |
| stopped_at | canceled_at |
| finish | effective_cancellation_date |
| activated_at | deal_closed_date |

### Invoices & Lines

| Pennylane field | Fincome field |
| ---- |
| id | original_id (invoice) |
| date | date |
| invoice_number | invoice_number |
| status | status |
| customer.source_id | customer_id |

### Invoice lines

| Pennylane field | Fincome field |
| ---- |
| id | original_id (line) |
| product_id | price_id |
| currency_price_before_tax | amount_excluding_tax_after_discount |
| currency_tax | tax_amount |
| label | description |
| quantity | quantity |
| currency | currency_code |
| Periods | period_start, period_end |

### Credit notes

| Pennylane field | Fincome field |
| ---- |
| credit_notes\[].id | original_id |
| currency_price_before_tax | amount (inverted) |
| currency_tax | tax_amount (inverted) |
| currency | currency_code |
| Discounted amount | discount_amount = 0 (forced) |
| Credit note attached to invoice | credit_note_id, invoice_id |
---
# Next steps

* Check your KPIs in the MRR, Churn, and Cohort views
* Add other billing sources (Stripe, Chargebee, etc.)
* Enrich your customer data (segmentation, company size...)
* Schedule a session with your Customer Success to go further
