- Brand
- Facturillo
- Category
- Finance
- Primary Subcategory
- Personal Finance & Budgeting Aggregators
Integration details
Description
facturillo keeps your Panamanian receipts ("facturas") organized automatically — scan the DGI QR code and every line item, vendor, and total is captured. This app connects ChatGPT to your facturillo account with read-only access, so you can ask natural questions about your real spending: "How much did I spend on groceries last month?", "Where did I buy this?", "Which store do I visit most?". Answers come from your actual receipt data — totals, line items, vendors, payment methods — never estimates. Requires a facturillo account (facturillo.com); data features require an active plan.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Personal Finance & Budgeting Aggregators
- Secondary Subcategories
- None listed
- Brand
- Facturillo
- Access
- Account required
- First tracked
- 2026-07-26
- Tool count
- 24
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Agent DiscoverabilityChatGPT Discoverability ScoreUpdated dailyThe first to track the ChatGPT, Claude, Muse, Grok & Google ecosystems, with the largest database on the core platforms. Tracked daily since .
0/100
Invisible#30of 86
in Personal Finance & Budgeting Aggregators- Picked
- 0.0/100
- Found
- 0.0/100
- Positioned
- –/100
Get alerts for facturillo
Get updates when facturillo’s Discoverability Score or category rank changes.
Competing in ChatGPT Personal Finance & Budgeting Aggregators
View Category24 tools agents can invoke
Get a receipt's attached documents: the official DGI factura PDF for scanned receipts (kind 'dgi_pdf'), the receipt photo/PDF (kind 'primary'), and extra Pro attachments (kind 'extra'). Returns temporary download links (15 minutes — call again for fresh ones). Pass include_content:true to ALSO receive the files inline as image/document content blocks so you can read the actual document (files over ~3.5 MB keep only their link, flagged contentSkipped). receipts_search with has_attachment:true and response_format:'detailed' finds the receipts that have documents (its rows carry hasAttachment). Scanned (non-manual) receipts usually have the DGI PDF even when hasAttachment is false. Pass the same `context` you searched in.
receipt_attachments
Search the account's receipts (facturas). Filters: date range (ISO dates, Panama local timeline), vendor query, free text (text_query matches vendor, title, AND purchased line descriptions), vendor_category (receipt-level expense category, partial match — discover values via spending_summary group_by:'category'), product_category (matches receipts containing a product line of that category), total range, has_attachment (true = only receipts with attached documents). Every row carries hasAttachment — to show a receipt's document, search with has_attachment:true + response_format:'detailed', then pass the id to receipt_attachments. Paginated (default 20, max 50) — pass nextCursor to continue. response_format 'concise' (default, token-lean) or 'detailed' (includes ids for receipts_get chaining). NOTE: linesCount counts the lines as PRINTED on the receipt; receipts_get returns consolidated PRODUCT items (repeated lines of the same product merged), so its items array can be shorter — not missing data. Pass `context` to query a linked account (see list_contexts); in shared contexts rows carry addedBy — WHICH MEMBER added each receipt, for the members of the context's own account; a row owned by one of its stores omits addedBy. Rows also carry hasDgiPdf (official DGI factura PDF available via receipt_attachments).
receipts_search
Search the business's own SALES (ingresos, facturas EMITIDAS): the electronic invoices it issued to its clients, plus manually entered income. These are NOT purchases, use receipts_search for those. Filters: q (free text over title, client name, note, CUFE and the SOLD product descriptions), date range (from inclusive, to EXCLUSIVE, ISO dates on the Panama timeline), category (an income category key OR a group key, which expands to the whole group; discover values via income_summary group_by:'category'), client (finds this business's own issued invoices by the client name recorded on them. It searches existing records only.), doc_type (the DGI Tipo de Documento code), total range. Paginated (default 20, max 50), pass nextCursor to continue. TOTALS ARE SIGNED: a nota de crédito (doc_type 04 or 06) carries a NEGATIVE total and tax, so summing rows gives the NET. taxPending true means the source carried no ITBMS column, so tax 0 is not a claim of zero tax. Requires the business's MAIN account context, not a sucursal, and owner or superadmin access to it (see list_contexts).
income_search
Search Panama's online catalogue for products by name, brand or GTIN (8 to 14 digits). Each product says how many stores list it (storeCount) and which (stores, cheapest first), the cheapest store and its price (bestStore, bestPrice) and the dearest store and its price (worstStore, worstPrice). For every store's price call price_offers. A product with no current online offer shows no price and no store. The query matches every word of two or more characters, and any single digit, in any order, ignoring the Spanish accents, the ñ and punctuation. A one-letter word beside a longer one (the C of vitamina C) must appear as a whole word, while common words (de, para, con, y, a, o, x, l, g and the like) are ignored, so search first and ask only when the results are ambiguous. When no product matches every word of a query of two or more words, the answer carries relaxed: true and the products that match all words but one, each with matchedWords, and relaxed: false with no products when none matches even that. Each relaxed product misses one of the words, often the one that names the product: offer one only when it is the kind of product the person asked for and say which word it misses, and otherwise, after the search with fewer words below, say the product is not listed. When the answer is thin (no product, one or two, or relaxed ones only), search once more with fewer words, the brand or the product alone without size, flavour or variant (a brand of one or two letters goes with the product word), before saying a product is not sold, and say who sells a product from its stores and storeCount, never calling a store the only seller unless storeCount is 1. storeCount counts a chain once however many banners or branches it lists. Prices are the stores' webshop prices, read daily. Pages of at most 10 by default (the limit is capped by the plan's search maximum). Available on every plan. Each call counts one unit of the daily price quota.
price_search
Search PURCHASED PRODUCTS (line items) across the account's receipts — "when did I buy X, what did it cost". Filters: product text query, vendor, date range. Product descriptions are mostly in SPANISH (Panamanian receipts) — search Spanish terms too (milk→leche, bread→pan, rice→arroz). Rows carry the product, price, vendor, date, and receiptId (chains to receipts_get / receipt_attachments). Paginated (default 20, max 50) — pass nextCursor to continue. Pass `context` for a linked account (see list_contexts).
products_search
What the business SELLS: its own products aggregated across the invoices it issued, with how many lines sold each one (count), how many documents they appear on, the quantity, the net income and the most recent unit price. Filters: q (product description), category (a product-taxonomy fine key), date range (from inclusive, to EXCLUSIVE). Products are keyed by the business's own product identity when the line carries one and by the normalized description otherwise, so a product sold before that identity existed still appears (its productKey is then null). total is SIGNED (credit notes reduce it), quantity sums the PRINTED quantities, and lastPrice is always positive. Paginated (default 20, max 50), pass nextCursor. Requires the business's MAIN account context, not a sucursal, and owner or superadmin access to it (see list_contexts).
income_products_search
Search the user's receipts (facturas) by free-text query over vendor, title, and purchased items. Returns up to 20 results (id/title). For date/total filters, pagination, or linked-account contexts use receipts_search.
search
Price changes of online supermarket offers in Panama over one scope: cuts, rises, new offers and delistings, each with the price before and after, the change in percent and its day. Pro plan and above. The scope is one of: products (a list of GTINs or node ids the person gave, up to your plan's basket size), basketId (one of your app baskets), store (a store's name), a category key of the catalogue (any size, and an unknown key is refused with the list of keys), or watchList: true (Business and Cuestio). The category key is for the call, not for the prose: name the category in the person's words. The window is from/to (YYYY-MM-DD, Panama days, by default the last 7 days, at most 90). kinds filters the kinds, and the list pages with limit (at most 150) and cursor, and price_export (Business and up) gives everything at once. counts gives the changes per kind over the whole result: use it instead of recounting.
price_changes
Compare a basket of products across the online stores: each store's total over the products it prices, how many it prices and which it misses (the count over the whole basket, and the missing ids of the current page), the cheapest store (the one that prices the most products, then the lowest total), and a per-product price matrix (paged, while stores and cheapestStore always cover the whole basket). The basket is a list of products (GTINs or nodeIds), one of your app baskets (basketId) or your watch list (Business and Cuestio), which is compared whole up to its own size limit. The plan caps the basket size: 10 products on Free, 50 on Pro, 200 on Business, 5,000 on Cuestio. Available on every plan. Each call counts one unit of the daily price quota. unmatched lists the inputs with no product, and unmatched and unpriced are cut to the page size (their counts cover the whole basket). Tell the person the stores' totals, counts and the cheapest store by name. The matrix is the data, not something to describe.
price_basket
Lists the receipt contexts this account can query: 'personal' (default), 'business' (when the user has an active business profile — receipts tagged proBusiness), and any linked family/business accounts (query their receipts by passing their id as `context` to the data tools).
list_contexts
Get one receipt (factura) by id — header, totals, payment methods, attachment availability, and line items. `items` are CONSOLIDATED products: repeated printed lines of the same product are merged into one item (quantities and totals summed), so items.length can be less than the receipt's printed linesCount from receipts_search — the totals still reconcile. Get ids from receipts_search with response_format 'detailed'. Pass the same `context` you searched in; in shared contexts the receipt carries addedBy (which member added it, for the members of the context's own account — a receipt owned by one of its stores omits addedBy), and attachments.hasDgiPdf says whether the official DGI factura PDF is available via receipt_attachments.
receipts_get
Get ONE income document (a factura the business ISSUED, or a manual income) by id, with the product lines it sold. Get ids from income_search. Line tax and total are SIGNED (negative on a nota de crédito) while unitPrice is always positive. items is empty on a header-only factura (linesCount 0) and on documents whose lines were never harvested from the DGI. categorySource says who decided the category: manual (the user picked), rule, ai (an accepted suggestion) or default (the business default). Requires the business's MAIN account context, not a sucursal, and owner or superadmin access to it (see list_contexts).
income_get
Where products are listed in Panama's online stores and what their stock reads: per product and store whether it is listed, its online-shop stock flag webStock (true or false as the webshop says, null when the store publishes none), its price and the day of that price, plus a summary per store: listed, webStock (the listed products it states in stock), stated (the listed products whose stock it states, 0 at a store that does not publish stock) and coverage. A store absent from a product's row does not list that product. Cuestio plan, and on the Business plan for your own watch list (watchList: true) or one of your baskets (basketId) only. Give one scope: brand, basketId, watchList: true or products (GTINs or node ids, up to your plan's basket size). stores narrows the stores. The summary comes whole and the products page with limit (at most 25) and cursor, and the cursor pages the rest. A page holds up to 25 products, fewer when the rows are heavy. The summary's listed count per store is the answer to how many products a store lists. Mention stock only when the person asks about it. No menciones existencias ni disponibilidad salvo que la persona pregunte por ellas. Una tienda que no publica existencias tiene existencias desconocidas: nunca digas que está agotada ni que se asume disponible. Solo una tienda que publica existencias puede estar agotada. / Say nothing about stock or availability unless the person asks about it. A store that publishes no stock has unknown stock: never call it out of stock and never say it is assumed available. Only a store that publishes stock can be out of stock.
price_availability
Fetch one receipt (factura) document by id from `search`. Returns the full receipt (header + line items) as the document text; items are consolidated products (repeated printed lines of the same product merged, quantities summed). For item toggles or linked-account contexts use receipts_get.
fetch
The online price history of one product per store and branch, as runs of a constant price (granularity "segments", the default) or one point per day ("daily"). Panama days, by default the last 30 days ending today, a window of at most 400 days. The Free plan sees its last 30 days (clampedTo says when a request was cut). Daily history starts on 2026-09-02 (sparseBefore says when a window reaches before it). Available on every plan. Each call counts one unit of the daily price quota.
price_history
List the account's baskets (canastas), the same ones the facturillo app shows: name, icon, color, line count, the last refresh and bestBuy (the cheapest store and total, or the best two-store split, as the app recomputes it after every change). With basketId, that one basket and its products (lineId, name, brand, quantity, the product id, the line total (quantity x price) and the store). An article's line (a product sold by weight or by the unit, with no barcode) carries unit_basis (kg, L, unidad or docena), the unit its quantity is in: say the amount with its unit (1.5 kg). Every answer carries the plan's caps: how many baskets the plan allows, how many are used and how many products a basket may hold. The app's own caps apply (by default the free plan holds 1 basket of up to 5 products and Pro 20 baskets of up to 100, and per-account limits set by support win). Pages with limit and cursor, and total is the number of baskets. Call it only when the person asks about their baskets or names one whose id you do not have.
basket_list
Every current online offer for one product, cheapest first: the store, its branch when the chain lists several, the price, the store's previous ("was") price, the price basis, the product page, the day the price was read and the day it last changed. Pass stock: true to carry each offer's online-shop stock flag (webStock) and the stores' stock notes. webStock is the store's online-shop flag, true or false as the webshop says, and null when the store publishes none, which means unknown stock, never out of stock. notes carries the stores' data caveats under stock: true or includeOutOfStock: false. storeCount is the number of stores that list it, a chain's banners and branches counted once, and offerCount the number of offers: give storeCount as the number of stores. No menciones existencias ni disponibilidad salvo que la persona pregunte por ellas. Una tienda que no publica existencias tiene existencias desconocidas: nunca digas que está agotada ni que se asume disponible. Solo una tienda que publica existencias puede estar agotada. / Say nothing about stock or availability unless the person asks about it. A store that publishes no stock has unknown stock: never call it out of stock and never say it is assumed available. Only a store that publishes stock can be out of stock. Available on every plan. Each call counts one unit of the daily price quota.
price_offers
Promotions live in Panama's online supermarkets: rule list = the price below the store's own list price, rule regular = the price below the regular price (the highest price held 14 days or more in the 90 days up to `to`), and either (default) = both. Each with its depth in percent, since when, and the store. Promotions deeper than 80 % (a price below a fifth of the price it is measured against), most often a unit priced against a pack, are left out and counted as suspectPromotions. One row per product and store: when a chain lists several branches, the cheapest branch's offer is the row. Cuestio plan. stores defaults to the configured supermarket chains. scope narrows the products to one of: products (a list of GTINs or node ids the person gave, up to your plan's basket size: use it when the person names codes, before creating a basket), basketId (one of the app's baskets), a category key of the catalogue (any size, and an unknown key is refused with the list of keys) or watchList: true. The category key is for the call, not for the prose: name the category in the person's words. includeEnded (default false) adds the promotions that ended inside the window (from/to, default the last 14 days, at most 90), each with its until day. Pages of at most 150 rows with limit and cursor. For everything at once use price_export. byStore gives, per store over the whole result, the count of promotions, how many are live and ended, and the mean, median and deepest depth in percent: use it for any per-store count or depth instead of recounting the rows, and counts repeats the count per store.
price_promotions
Returns the authenticated facturillo account id (connection check).
whoami
Aggregate spending server-side — totals/counts/averages grouped by vendor, category, month, week, or day, or by paymentMethod (per split-payment amounts; metrics total/count/avg only). Faster and cheaper than fetching receipts and adding them up.
spending_summary
Aggregate the business's SALES server-side. metric: total (billed), count (documents), tax (ITBMS charged) or avg (the average ticket). group_by: client, category, category_group, month, week, store (the owning account id), doc_type (the DGI Tipo de Documento code, the same spelling as income_search's filter) or product_category (the category of the sold lines). BOTH dates are required (ISO, from inclusive, to EXCLUSIVE, Panama timeline). Faster and cheaper than paging income_search and adding it up. Values are SIGNED, so notas de crédito reduce the total and avg averages the signed totals, not the sales alone. documents is how many documents the metric was computed over, so value times documents reconciles with the bucket's total; with group_by product_category the metric aggregates LINES while documents counts the documents those lines came from. metric tax EXCLUDES NOTHING, but a document whose source carried no ITBMS column reports 0 tax by construction, so every row also carries taxPendingCount: a bucket with taxPendingCount above 0 is a LOWER BOUND on the ITBMS actually charged, and income_search shows which documents they are (taxPending true). category and category_group buckets carry a Spanish label; product_category buckets carry the raw product-taxonomy key. Requires the business's MAIN account context, not a sucursal, and owner or superadmin access to it (see list_contexts).
income_summary
Per-vendor profile of the account's spending — receipts count, total spent, average ticket, first/last visit — top 60 by total. Optional vendor filter and date range. Richer than spending_summary's single-metric rows when the question is about the vendors themselves. Best suited to questions about which stores the user visits or spends the most at.
vendors_summary
The online stores the price tools cover in Panama, most listings first: per store its banners (the Cochez banners are one store), how many branches it lists online, how many offers and products it lists, the categories it lists most, and whether it publishes stock (stated, partial, constant or absent). Ask it before saying a store or a kind of store is not covered. Store names in the prose, never the source keys. Available on every plan. Each call counts one unit of the daily price quota.
price_stores
A price index of one store (reference) against its competitors over the products both sell online in Panama: per competitor the matched products, the median and mean of competitor price / reference price, the shares cheaper, dearer and equal (0.5 % tolerance) and the ten biggest gaps each way with both prices. Pairs whose price ratio is below 0.2 or above 5, most often a unit priced against a pack, are left out of the comparison and counted as suspectPairs. Cuestio plan. competitors defaults to the configured supermarket chains other than the reference, and inStockOnly (default true) leaves out a pair when either store publishes stock and marks its offer out of stock. scope narrows the products: products (a list of GTINs or node ids the person gave, up to your plan's basket size), a basket (basketId), a category key of the catalogue (any size, and an unknown key is refused with the list of keys) or your watch list (watchList: true). Chains with branches are read at their main branch. Tell the person the matched products, the median ratio and the shares per competitor as the tool returns them, with the competitors by name. The category key is for the call, not for the prose: name the category in the person's words. No menciones existencias ni disponibilidad salvo que la persona pregunte por ellas. Una tienda que no publica existencias tiene existencias desconocidas: nunca digas que está agotada ni que se asume disponible. Solo una tienda que publica existencias puede estar agotada. / Say nothing about stock or availability unless the person asks about it. A store that publishes no stock has unknown stock: never call it out of stock and never say it is assumed available. Only a store that publishes stock can be out of stock.
price_index
facturillo ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve facturillo's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are facturillo alternatives on ChatGPT?
As of 2026-11-02, facturillo competes with Finances, AI Expense, Aurio Money Calculators, Aurio Statement Analyzer, BankPilot, Bankrate, BetterOff, Bilance and 77 more in ChatGPT Personal Finance & Budgeting Aggregators, ranked by public Discoverability Score.
Where does facturillo rank in Personal Finance & Budgeting Aggregators on ChatGPT?
As of 2026-11-02, facturillo ranks #30 of 86 in ChatGPT Personal Finance & Budgeting Aggregators with a Discoverability Score of 0/100 (Invisible).
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.