Connecting your inventory: spreadsheets, PDFs, and Google Sheets
Last updated: April 2026
Sources is the inbound side of Techfleet Sync — the place you connect whatever data you already have so we can normalise it into your catalog. The wizard at /dashboard/data-sources accepts a much wider range of files now, and walks you through preview, mapping, and row review before anything hits your inventory.
What we accept
- Excel — .xlsx, .xls, .xlsm. Multi-tab workbooks supported.
- CSV / TSV — comma or tab delimited.
- PDF — supplier invoices, quotes, price lists. We use AI to extract the table.
- Word — .docx with a tables section, or plain-text price lists (AI fallback).
- Google Sheets — paste the share link, public or private. Auto-syncs every 6 hours.
File size cap is 10 MB. PDFs are capped at 50 pages. Image-only scanned PDFs aren't supported yet — we'll add OCR in a follow-up.
The wizard, end to end
- Choose the source type. For uploads, pick "File Upload" — it covers every file type above.
- Drop your file. We parse it server-side and detect every sheet inside an Excel workbook.
- Preview step — for multi-tab Excel, tick which sheets to import. The header row is auto-detected; click any row in the preview to override if our guess was wrong.
- Mapping step — every column gets matched to a canonical product field (Product name, IMEI, Grade, Price, etc.) by an AI assistant. Override any column dropdown.
- Review step — only shows up if any rows are missing required fields like price or product name. Fill them inline or click skip per row.
- Import — products land in /dashboard/inventory. Row-level errors are persisted so you can review them after the wizard closes.
Multi-tab Excel files
A real-world spreadsheet often has multiple tabs — one per device, one for IMEIs, a summary tab. The wizard shows every tab as a checkbox. We default to checking only tabs with at least 3 rows of data (so empty scratch sheets stay off). Each selected tab gets its own header-row pick and column mapping — pivot-shaped tabs (grades-as-columns) might need different mappings from a flat row-per-unit tab.
IMEIs from Excel
Excel renders any 12+ digit integer in scientific notation (3.57e14). Sync coerces these back to full 15-digit IMEI strings automatically — you don't need to format the column as Text first.
Missing required fields — review step
Required fields are Product name and Price. If a row is missing one (or has "BADLY SCRATCHED" instead of a number), the wizard shows a Review step with one form per problem row. You can:
- Type the missing value inline,
- Click "Skip row" to leave that single row out,
- Click "Skip all in this sheet" to bulk-skip a tab where most rows are unsalvageable.
Skipped + failed rows are persisted to your import_errors log. You can re-open the source from /dashboard/data-sources, click "View errors", and re-fix later.
PDF and Word
PDFs and Word docs go through an AI extraction step that reads the document and pulls out an inventory table. The output flows into the same preview, mapping, and review pipeline as Excel — you still get to confirm columns and fix missing fields. AI extraction is best-effort: a clean tabular layout (supplier invoice with a product table) works perfectly; a free-text email containing prices may need manual cleanup.
Google Sheets auto-sync
Once a Google Sheet is connected, Sync re-reads it every 6 hours and applies any changes. New rows show up in inventory, edited prices propagate, and column mappings persist across syncs. Manual "Sync now" from the data-sources list still works for on-demand pulls.
Where things show up after import
- Per-unit (IMEI/serial) rows go to /dashboard/inventory unit list
- Product-level rows (no IMEI) go to /dashboard/inventory product list
- Errors — click the source row in /dashboard/data-sources, then View errors
- Audit trail of imports — /dashboard/activity-log
Was this article helpful?