Rows landed per table
Top 12 of 15 tables, from your structured uploads.
| Category | Value |
|---|---|
| crew_hours | 14K |
| job_costs | 8,383 |
| estimate_lines | 4,256 |
| po_lines | 1,963 |
| job_activity | 1,912 |
| leads | 706 |
| invoices_ar | 570 |
| purchase_orders | 442 |
| vendor_price_list | 416 |
| change_orders | 221 |
| jobs | 218 |
| inventory | 118 |
What arrived, by week
Files ingested per ISO week — gaps are weeks nothing landed.
| Category | files |
|---|---|
| 2026-W33 | 22 |
| 2026-W34 | 1 |
| 2026-W36 | 2 |
Files by type and status
Every status is on the chart — a failed file is a fact, not an embarrassment.
| Category | ingested | duplicate | failed |
|---|---|---|---|
| csv | 13 | 0 | 0 |
| 6 | 1 | 0 | |
| docx | 2 | 0 | 0 |
| png | 0 | 0 | 1 |
| txt | 1 | 0 | 0 |
| xlsx | 1 | 0 | 0 |
Sources
Files can arrive by upload or straight from a cloud drive. Synced files run through the identical pipeline — re-syncing an unchanged file is detected and skipped.
25 uploaded by hand
Data quality
Found by reading your rows, not by a rule you configured. Issues that corrupt grouping also ride the charts they affect.
serious: 5 advisory: 17
| Severity | Column | Kind | Rows | What it means |
|---|---|---|---|---|
| serious | change_orders.status | missing values | 44 | 44 of 221 rows (19.9%) are blank with no pattern explaining which ones. |
| serious | invoices_ar.invoice_number | duplicate identifiers | 4 | invoice_number is named like a unique key and is 99.3% unique, but 4 row(s) share a value with another row. Joining on it multiplies rows and double-counts money. |
| serious | job_costs.invoice_number | duplicate identifiers | 364 | invoice_number is named like a unique key and is 95.7% unique, but 364 row(s) share a value with another row. Joining on it multiplies rows and double-counts money. |
| serious | job_costs.job_id | orphan references | 251 | 251 rows (3.0%) reference a job_id that does not exist in jobs. Examples: J-241782, J-241790, J-241994. Any total grouped through jobs silently excludes them. |
| serious | job_costs.cost_category | casing drift | 0 | 3 value(s) differ only by capitalisation, so they group as separate categories: Equipment / equipment; Material / material; Subcontractor / subcontractor |
| advisory | change_orders.approved_date | conditional column | 100 | Blank on 100 rows (45.2%), but that is expected: it is blank exactly when status is 'Pending', 'Rejected', 'Verbal'. Filter on status rather than treating the blanks as missing data, and use the non-blank subset as the denominator. |
| advisory | inventory.description | possible spelling variants | 0 | 1 pair(s) of near-identical values that may be the same thing typed differently: 2x10x16 #2 SYP / 2x6x16 #2 SYP |
| advisory | invoices_ar.paid_date | missing values | 47 | 47 of 570 rows (8.2%) are blank with no pattern explaining which ones. |
| advisory | job_activity.note | possible spelling variants | 0 | 5823 pair(s) of near-identical values that may be the same thing typed differently: Crew pulled to Angier for the morning / Crew pulled to Dunn for the morning; Crew pulled to Angier for the morning / Crew pulled to Micro for the morning; Crew pulled to Benson for the morning / Crew pulled to Dunn for the morning |
| advisory | job_costs.trade | values outside the reference list | 519 | 519 rows (6.2%) carry a trade that subcontractors does not list: General conditions. Usually fine — only a problem if you expected subcontractors to be exhaustive. |
| advisory | job_costs.trade | missing values | 419 | 419 of 8,383 rows (5.0%) are blank with no pattern explaining which ones. |
| advisory | jobs.actual_complete_date | conditional column | 41 | Blank on 41 rows (18.8%), but that is expected: it is blank exactly when status is 'In production', 'Signed, mobilising'. Filter on status rather than treating the blanks as missing data, and use the non-blank subset as the denominator. |
| advisory | jobs.town | possible spelling variants | 0 | 2 pair(s) of near-identical values that may be the same thing typed differently: Wilson's Mills / Wilsons Mills; Wilson's Mills / wilsons mills |
| advisory | leads.won_job_id | conditional column | 519 | Blank on 519 rows (73.5%), but that is expected: it is blank exactly when outcome is 'Lost', 'No response', 'Quoted, no decision'. Filter on outcome rather than treating the blanks as missing data, and use the non-blank subset as the denominator. |
| advisory | leads.first_contact_at | conditional column | 144 | Blank on 144 rows (20.4%), but that is expected: it is blank exactly when outcome is 'No response'. Filter on outcome rather than treating the blanks as missing data, and use the non-blank subset as the denominator. |
| advisory | leads.response_minutes | conditional column | 144 | Blank on 144 rows (20.4%), but that is expected: it is blank exactly when outcome is 'No response'. Filter on outcome rather than treating the blanks as missing data, and use the non-blank subset as the denominator. |
| advisory | po_lines.description | possible spelling variants | 0 | 1 pair(s) of near-identical values that may be the same thing typed differently: 2x10x16 #2 SYP / 2x6x16 #2 SYP |
| advisory | purchase_orders.received_date | missing values | 21 | 21 of 442 rows (4.8%) are blank with no pattern explaining which ones. |
| advisory | purchase_orders.promised_date | missing values | 6 | 6 of 442 rows (1.4%) are blank with no pattern explaining which ones. |
| advisory | vendor_price_list.sku | possible spelling variants | 0 | 9 pair(s) of near-identical values that may be the same thing typed differently: DCK-54X6-12 / DCK-54X6-16; LMB-2X10-16 / LMB-2X12-16; LMB-2X4-12 / LMB-2X4-16 |
| advisory | vendor_price_list.description | possible spelling variants | 0 | 11 pair(s) of near-identical values that may be the same thing typed differently: 1x4 D boards KD / 1x6 D boards KD; 2x10 #2 SYP KD / 2x12 #2 SYP KD; 2x10 #2 SYP KD / 2x4 #2 SYP KD |
| advisory | vendor_price_list.dimension | possible spelling variants | 0 | 1 pair(s) of near-identical values that may be the same thing typed differently: 1x6x16 / 1x6x6 |
Who and what shows up
Values taken from columns the profiler already typed as a person, place, category or code — counted across your tables, not extracted from prose.
People and organizations
16| Value | Tables | Rows | Seen in |
|---|---|---|---|
| Ridgeview Mutual | 1 | 87 | invoices_ar.payer_name ×87, invoice-ridgeview-remittance-2026-0518.pdf, master-services-ridgeview-2025.docx invoices_ar.csv |
| Blue Ridge Casualty | 1 | 34 | invoices_ar.payer_name ×34 invoices_ar.csv |
| Sandhills Property & Casualty | 1 | 27 | invoices_ar.payer_name ×27 invoices_ar.csv |
| Tarheel Indemnity | 1 | 22 | invoices_ar.payer_name ×22 invoices_ar.csv |
| Cardinal Peak Mutual | 1 | 18 | invoices_ar.payer_name ×18 invoices_ar.csv |
| Neuse Valley Insurance | 1 | 18 | invoices_ar.payer_name ×18 invoices_ar.csv |
| Whole-house remodel | 1 | 17 | jobs.job_name ×17 jobs.csv |
| Braddock Dental Group | 1 | 15 | invoices_ar.payer_name ×15 invoices_ar.csv |
| Wakefield Veterinary | 1 | 15 | invoices_ar.payer_name ×15 invoices_ar.csv |
| Ferrand Optical | 1 | 14 | invoices_ar.payer_name ×14 invoices_ar.csv |
| Basement finish | 1 | 13 | jobs.job_name ×13 jobs.csv |
| Master suite addition | 1 | 13 | jobs.job_name ×13 jobs.csv |
| Vestry Dental | 1 | 13 | invoices_ar.payer_name ×13 invoices_ar.csv |
| Ardmore Logistics | 1 | 12 | invoices_ar.payer_name ×12 invoices_ar.csv |
| Home addition | 1 | 12 | jobs.job_name ×12 jobs.csv |
| Bathroom remodel, 2 baths | 1 | 11 | jobs.job_name ×11 jobs.csv |
Places
16| Value | Tables | Rows | Seen in |
|---|---|---|---|
| Johnston | 2 | 658 | leads.county ×492, jobs.county ×166, weekly-price-sheet-piedmont-2026-0727.pdf, master-services-ridgeview-2025.docx jobs.csv, leads.csv |
| Clayton | 2 | 100 | leads.town ×74, jobs.town ×26 jobs.csv, leads.csv |
| Harnett | 2 | 96 | leads.county ×80, jobs.county ×16, master-services-ridgeview-2025.docx jobs.csv, leads.csv |
| Four Oaks | 2 | 88 | leads.town ×68, jobs.town ×15, jobs.town ×5, order-ack-piedmont-2026-0803.pdf, samples.pdf jobs.csv, leads.csv |
| Wake | 2 | 84 | leads.county ×65, jobs.county ×19, invoice-tarheel-concrete-2026-0402.pdf jobs.csv, leads.csv |
| Wilson | 2 | 72 | leads.county ×29, leads.town ×29, jobs.county ×7, jobs.town ×7 jobs.csv, leads.csv |
| Smithfield | 2 | 71 | leads.town ×54, jobs.town ×17 jobs.csv, leads.csv |
| Archer Lodge | 2 | 57 | leads.town ×39, jobs.town ×18 jobs.csv, leads.csv |
| Benson | 2 | 52 | leads.town ×40, jobs.town ×12, invoice-tarheel-concrete-2026-0402.pdf jobs.csv, leads.csv |
| Princeton | 2 | 52 | leads.town ×43, jobs.town ×9 jobs.csv, leads.csv |
| Dunn | 2 | 51 | leads.town ×43, jobs.town ×8 jobs.csv, leads.csv |
| Goldsboro | 2 | 50 | leads.town ×40, jobs.town ×10 jobs.csv, leads.csv |
| Wayne | 2 | 50 | leads.county ×40, jobs.county ×10, master-services-ridgeview-2025.docx jobs.csv, leads.csv |
| Micro | 2 | 49 | leads.town ×36, jobs.town ×13 jobs.csv, leads.csv |
| Kenly | 2 | 48 | leads.town ×34, jobs.town ×14 jobs.csv, leads.csv |
| Pine Level | 2 | 46 | leads.town ×37, jobs.town ×8, jobs.town ×1 jobs.csv, leads.csv |
Categories
16| Value | Tables | Rows | Seen in |
|---|---|---|---|
| Electrical | 5 | 1,358 | job_costs.trade ×727, estimate_lines.trade ×433, po_lines.category ×185, inventory.category ×9, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, estimate_lines.csv, inventory.csv, job_costs.csv |
| Plumbing | 5 | 1,334 | job_costs.trade ×608, estimate_lines.trade ×374, po_lines.category ×344, inventory.category ×5, acme_corporation_export_branch_stock_summary.category ×3 Acme-Corporation-Export.xlsx, estimate_lines.csv, inventory.csv, job_costs.csv |
| Flooring | 5 | 1,189 | job_costs.trade ×629, estimate_lines.trade ×386, po_lines.category ×168, acme_corporation_export_branch_stock_summary.category ×3, inventory.category ×3 Acme-Corporation-Export.xlsx, estimate_lines.csv, inventory.csv, job_costs.csv |
| Drywall | 5 | 1,185 | job_costs.trade ×643, estimate_lines.trade ×363, po_lines.category ×162, inventory.category ×13, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, estimate_lines.csv, inventory.csv, job_costs.csv |
| Roofing | 5 | 753 | job_costs.trade ×405, estimate_lines.trade ×231, po_lines.category ×100, inventory.category ×13, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, estimate_lines.csv, inventory.csv, job_costs.csv |
| Selma | 4 | 255 | purchase_orders.branch ×141, jobs.branch ×76, inventory.branch ×27, acme_corporation_export_branch_stock_summary.branch ×11 Acme-Corporation-Export.xlsx, inventory.csv, jobs.csv, purchase_orders.csv |
| Clayton | 4 | 248 | purchase_orders.branch ×139, jobs.branch ×71, inventory.branch ×27, acme_corporation_export_branch_stock_summary.branch ×11 Acme-Corporation-Export.xlsx, inventory.csv, jobs.csv, purchase_orders.csv |
| Four Oaks | 4 | 185 | purchase_orders.branch ×95, jobs.branch ×46, inventory.branch ×32, acme_corporation_export_branch_stock_summary.branch ×12 Acme-Corporation-Export.xlsx, inventory.csv, jobs.csv, purchase_orders.csv |
| Smithfield | 4 | 135 | purchase_orders.branch ×67, inventory.branch ×32, jobs.branch ×25, acme_corporation_export_branch_stock_summary.branch ×11 Acme-Corporation-Export.xlsx, inventory.csv, jobs.csv, purchase_orders.csv |
| ea | 3 | 1,997 | estimate_lines.unit ×1175, po_lines.unit ×777, inventory.unit ×45 estimate_lines.csv, inventory.csv, po_lines.csv |
| Piedmont Building Supply | 3 | 975 | job_costs.vendor ×483, vendor_price_list.vendor ×416, purchase_orders.vendor ×76 job_costs.csv, purchase_orders.csv, vendor_price_list.csv |
| lf | 3 | 697 | estimate_lines.unit ×668, po_lines.unit ×26, inventory.unit ×3 estimate_lines.csv, inventory.csv, po_lines.csv |
| Tools & Safety | 3 | 350 | po_lines.category ×339, inventory.category ×7, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, inventory.csv, po_lines.csv |
| sq | 3 | 261 | estimate_lines.unit ×231, po_lines.unit ×26, inventory.unit ×4 estimate_lines.csv, inventory.csv, po_lines.csv |
| Lumber | 3 | 209 | po_lines.category ×186, inventory.category ×19, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, inventory.csv, po_lines.csv |
| Paint & Sundries | 3 | 203 | po_lines.category ×189, inventory.category ×10, acme_corporation_export_branch_stock_summary.category ×4 Acme-Corporation-Export.xlsx, inventory.csv, po_lines.csv |
Codes and identifiers
12Related material
Tables and documents that share language already in the catalog or the extracted passages. Not a trained topic model.
job / category / money
24Grouped because they share these terms.
- invoice-meridian-drywall-2026-0311.pdf invoice
- invoice-ridgeview-remittance-2026-0518.pdf invoice
- invoice-tarheel-concrete-2026-0402.pdf invoice
- master-services-ridgeview-2025.docx other
- memo-change-order-policy-2026-06.txt correspondence
- order-ack-piedmont-2026-0803.pdf other
- samples.pdf other
- subcontract-meridian-drywall-2026.docx contract
- weekly-price-sheet-piedmont-2026-0727.pdf other
- acme_corporation_export_branch_stock_summary 45 rows
- acme_corporation_export_vendor_scorecard 6 rows
- change_orders 221 rows
- crew_hours 13,727 rows
- estimate_lines 4,256 rows
- inventory 118 rows
- invoices_ar 570 rows
- job_activity 1,912 rows
- job_costs 8,383 rows
- jobs 218 rows
- leads 706 rows
- po_lines 1,963 rows
- purchase_orders 442 rows
- subcontractors 14 rows
- vendor_price_list 416 rows
Your documents
Everything uploaded, and what became of it. Remove a file to delete it from this tenant — that also clears a duplicate block on the same bytes.
| File | Type | Size | Status | ||
|---|---|---|---|---|---|
| samples.pdf | 4,427 KB | Duplicate | identical to already-ingested 'samples.pdf' | ||
| image.png | 164 KB | Failed | unsupported file type '.png' — PDF, DOCX, TXT, MD, XLSX, CSV and TSV are supported | ||
| samples.pdf | other | 4,427 KB | Ingested | 9 passages | |
| memo-change-order-policy-2026-06.txt | correspondence | 0 KB | Ingested | 1 passages | |
| master-services-ridgeview-2025.docx | other | 1 KB | Ingested | 1 passages | |
| subcontract-meridian-drywall-2026.docx | contract | 1 KB | Ingested | 1 passages | |
| invoice-ridgeview-remittance-2026-0518.pdf | invoice | 1 KB | Ingested | 1 passages | |
| weekly-price-sheet-piedmont-2026-0727.pdf | other | 1 KB | Ingested | 1 passages | |
| order-ack-piedmont-2026-0803.pdf | other | 1 KB | Ingested | 1 passages | |
| invoice-tarheel-concrete-2026-0402.pdf | invoice | 1 KB | Ingested | 1 passages | |
| invoice-meridian-drywall-2026-0311.pdf | invoice | 1 KB | Ingested | 1 passages | |
| vendor_price_list.csv | data | 32 KB | Ingested | 1 table(s) |
Data catalog
Every table found in your files, landed with real column types.
| Table | Rows | Cols | Key entities | Source |
|---|---|---|---|---|
| acme_corporation_export_branch_stock_summary | 45 | 6 | branch, category | Acme-Corporation-Export.xlsx / Branch Stock Summary |
| acme_corporation_export_vendor_scorecard | 6 | 8 | vendor | Acme-Corporation-Export.xlsx / Vendor Scorecard |
| change_orders | 221 | 8 | co_id, job_id, description, status | change_orders.csv |
| crew_hours | 13,727 | 6 | employee, job_id | crew_hours.csv |
| estimate_lines | 4,256 | 8 | job_id, line_code, trade, description | estimate_lines.csv |
| inventory | 118 | 9 | sku, description, category, branch | inventory.csv |
| invoices_ar | 570 | 9 | invoice_number, job_id, payer_name, payer_type | invoices_ar.csv |
| job_activity | 1,912 | 5 | job_id, author, entry_type, note | job_activity.csv |
| job_costs | 8,383 | 9 | cost_id, job_id, vendor, trade | job_costs.csv |
| jobs | 218 | 18 | job_id, job_name, job_type, site_address | jobs.csv |
| leads | 706 | 11 | lead_id, source, town, county | leads.csv |
| po_lines | 1,963 | 9 | po_number, job_id, sku, description | po_lines.csv |
| purchase_orders | 442 | 10 | po_number, job_id, vendor, branch | purchase_orders.csv |
| subcontractors | 14 | 7 | sub_name, trade, license_number | subcontractors.csv |
| vendor_price_list | 416 | 6 | vendor, sku, description, dimension | vendor_price_list.csv |
Time coverage
The date range each table actually spans — gaps here mean missing exports.
| Table | Coverage |
|---|---|
| change_orders | co_date: 2024-09-09 to 2026-07-28 |
| crew_hours | work_date: 2024-08-26 to 2026-07-31 |
| inventory | last_counted: 2025-07-19 to 2026-07-28 |
| invoices_ar | invoice_date: 2024-09-12 to 2026-07-31 |
| job_activity | log_date: 2024-08-30 to 2026-08-03 |
| job_costs | cost_date: 2024-08-27 to 2026-07-31 |
| jobs | start_date: 2024-08-24 to 2026-07-30 |
| leads | received_at: 2024-08-01 to 2026-07-31 |
| purchase_orders | order_date: 2024-09-09 to 2026-07-30 |
| subcontractors | coi_expiry: 2026-07-27 to 2027-06-16 |
| vendor_price_list | week_of: 2026-02-02 to 2026-07-27 |