Before you start
You need API credentials from Applix: a Client ID and a Client Secret. Ask Applix support to enable API access for your company; the credentials give access to the modules your Applix plan includes (Sales, Finance, Contracts).Configuring Applix as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Applix option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
The following configurations are available:- Client ID: The Client ID of your Applix API credentials.
- Client Secret: The Client Secret of your Applix API credentials.
- Start Date: Documents dated from this day on are synced: orders, quotes and invoices by their date, accounts receivable and payable by their due date, and cash and bank balances by month. Contracts and registries (customers, products and others) are always read in full.
- Invoice series (advanced, default
1): the invoice (nota fiscal) series to sync, separated by commas, for example1or1,2,900. Applix lists invoices one series at a time, so include every series your company uses.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new and changed data, which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data, which is good if, for example, you don’t want to have deleted data in your catalog.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while. Only the detail streams are incremental, so it is rarely needed for this connector.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.Streams and Fields
Available streams
The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.
Nested lists (order items, contract installments, contacts, custom fields) are stored as JSON text, for example
json_extract_scalar(produto, '$[0].codigo'). Small objects such as addresses are split into their own columns (endereco_rua, endereco_cidade). Fields Applix returns that are not in its documentation are kept in additional_fields (JSON), so no data is lost.
Fields by stream
Accounts Receivable and Payable
Accounts Receivable and Payable
Stream name:
contas_receber_pagar. One row per account (or per cost-centre/project split of an account): receivables, payables and contract installments not invoiced yet.Sync Strategy:- Full table
- Primary key(s):
row_key
Boletos
Boletos
Stream name:
boletos. One row per boleto of every customer, in every status.Sync Strategy:- Full table
- Primary key(s):
id
Cash and Bank Balances
Cash and Bank Balances
Stream name:
saldos_caixa_banco. One row per cash/bank account and month: the balance at the end of the month.Sync Strategy:- Full table
- Primary key(s):
row_key
Receivables (Sales)
Receivables (Sales)
Stream name:
contas_receber. One row per receivable as the sales module shows it, with the linked invoices and orders.Sync Strategy:- Full table
- Primary key(s):
row_key
Contracts
Contracts
Stream name:
contratos. One row per contract renewal (numero + renovacao).Sync Strategy:- Full table
- Primary key(s):
row_key
Contract Details
Contract Details
Stream name:
contratos_detalhes. One row per contract renewal with its items, installments (with collection and receivables) and finance setup.Sync Strategy:- Full table
- Primary key(s):
row_key
Sales Orders
Sales Orders
Stream name:
pedidos. One row per sales order.Sync Strategy:- Full table
- Primary key(s):
numero
Sales Order Details
Sales Order Details
Stream name:
pedidos_detalhes. One row per sales order with its items.Sync Strategy:- Incremental on
datapedido - Primary key(s):
numero
Quotes
Quotes
Stream name:
orcamentos. One row per quote.Sync Strategy:- Full table
- Primary key(s):
row_key
Quote Details
Quote Details
Stream name:
orcamentos_detalhes. One row per quote with its items. Not selected by default.Sync Strategy:- Incremental on
datapedido - Primary key(s):
numero
Invoices
Invoices
Stream name:
notas_fiscais. One row per invoice (nota fiscal) of the configured series.Sync Strategy:- Full table
- Primary key(s):
row_key
Invoice Details
Invoice Details
Stream name:
notas_fiscais_detalhes. One row per invoice with taxes, items and linked orders.Sync Strategy:- Incremental on
dataemissao - Primary key(s):
row_key
Customers
Customers
Stream name:
clientes. One row per customer.Sync Strategy:- Full table
- Primary key(s):
row_key
Products
Products
Stream name:
produtos. One row per product.Sync Strategy:- Full table
- Primary key(s):
codigo
Stock Balance
Stock Balance
Stream name:
saldo_estoque. One row per product with its stock by storage location and lot.Sync Strategy:- Full table
- Primary key(s):
codigo
Price Lists
Price Lists
Stream name:
tabela_precos. One row per price list with its versions and product prices.Sync Strategy:- Full table
- Primary key(s):
tabelapreco
Product Categories
Product Categories
Stream name:
categorias_produto. One row per product category.Sync Strategy:- Full table
- Primary key(s):
codigo
Payment Terms
Payment Terms
Stream name:
condicoes_pagamento. One row per payment term.Sync Strategy:- Full table
- Primary key(s):
codigo
Collection Methods
Collection Methods
Stream name:
formas_cobranca. One row per collection method.Sync Strategy:- Full table
- Primary key(s):
row_key
Customer Groups
Customer Groups
Stream name:
grupos_cliente. One row per customer group.Sync Strategy:- Full table
- Primary key(s):
codigo
Services
Services
Stream name:
servicos. One row per service.Sync Strategy:- Full table
- Primary key(s):
codigo
Scrap Balances
Scrap Balances
Stream name:
sucatas_receber. One row per scrap balance document (scrap to receive or to pay).Sync Strategy:- Full table
- Primary key(s):
row_key
Salespeople
Salespeople
Stream name:
vendedores. One row per salesperson.Sync Strategy:- Full table
- Primary key(s):
vendedor
Implementation Notes
How changes are captured
Accounts, boletos, orders and contracts change status (paid, cancelled, invoiced) long after they are created, and Applix has no filter for “changed since”. So:- Accounts receivable and payable are read by due date, in 30-day periods, from the Start Date up to five years ahead (future installments and bills). Every extraction reads the whole range again, so a payment or a cancellation always shows up.
- Boletos are read for every customer, in each status (open, settled, cancelled), on every extraction. This means three requests per customer, so extractions take longer for companies with many customers.
- Cash and bank balances are read month by month from the Start Date; the current month shows the balance so far.
- Contracts are read in full on every extraction (from the year 2000 on), and so are their details, because installments are paid or renegotiated long after the contract starts. Each renewal of a contract is its own row.
-
Orders, quotes and invoices are read by date from the Start Date on every extraction, so their status is always current. Their detail streams make one request per document, so they are incremental. The first extraction reads every detail (and saves its progress as it goes, so an interrupted first extraction continues where it stopped; progress is not saved while Applix cannot find any of the details requested, in case the problem is on Applix’s side). Later extractions read the details again for:
- documents dated in the last 30 days before the most recent extraction;
- documents up to one year old whose status is not final yet (for example an order not yet invoiced or cancelled), until they reach a final status, and once more when they do.
pedidos,orcamentos,notas_fiscais) always show the current status.
Data Quality Considerations
- Completeness checks: each list is read in full and checked against the total Applix reports before it is loaded. When Applix returns fewer rows than that total, they are only accepted if the extraction can confirm that Applix’s total counts more than the filtered data (for example, the whole table); if it can confirm the opposite, the extraction of that stream fails instead of loading a cut-off list. If it cannot tell either way, the data is read twice, loaded only when both reads are identical, and a warning says its completeness could not be fully verified. If the data changes while it is being read (for example, documents created during business hours), the list is read again; if it keeps changing, the extraction of that stream fails and the next extraction tries again.
- If an extraction fails: registries, cash and bank balances, and contracts with their details are read completely before anything is written, so a failed extraction leaves those tables as they were. Accounts receivable and payable, boletos, orders, quotes, invoices and their details are too large for that and are loaded period by period: if one of them fails midway, the run is marked as failed and, depending on your destination, the table may hold only the periods read before the failure until the next successful extraction, which reads everything again.
- Boletos: if Applix returns no boletos for any customer, the extraction shows a warning, because the table will be empty.
- Dates and times: dates and times are in Applix’s local time (Brazil), without a time zone.
- Quote numbers: Applix’s documentation does not list the quote number in the quotes list. When Applix sends it, it identifies the quote; when it does not, the quote’s details cannot be requested (a warning is shown) and two quotes identical in every field are kept as one row. That is why Quote Details is not selected by default: select it only if the
numerocolumn of Quotes is filled. - Customers without a CNPJ/CPF: they are kept as separate rows, with
cnpjcpfclienteempty (null) and arow_keybuilt from their type, names, email and phone. - Accounts with the same
id: an account split across cost centres or projects, or the installments of a contract, can appear as several rows with the sameid, each identified byrow_key.