Complete documentation for importing and exporting data
The Import/Export feature allows you to:
The Import/Export page uses a clean two-tab interface:
Access: Administration β Import/Export Data
π¨ CRITICAL: You MUST populate List of Values (LOVs) BEFORE importing data!
The import process validates EVERY row against your LOV data. If ANY row references a non-existent LOV value, the ENTIRE import will be rejected and NO data will be imported.
MeTEY uses a strict validation process to ensure data integrity:
| LOV Name | Location in App | Required For | Example Values |
|---|---|---|---|
| Payment Terms | Administration β List Of Values β Payments LOV | Clients, Suppliers | NET30, NET60, COD, CASH, DUE_ON_RECEIPT |
| Delivery Method | Administration β List Of Values β Delivery LOV | Clients, Suppliers | DELIVER, PICK, WILL_CALL, FREIGHT |
| How Found Us | Administration β List Of Values β How Found Us LOV | Clients | REFERRAL, WEBSITE, TRADE_SHOW, COLD_CALL |
| Pricing Matrix | Administration β Pricing Matrix | Clients | DEFAULT, PREFERRED, CONTRACTOR, WHOLESALE |
| Units | Administration β List Of Values β Units LOV | Products | pcs, ft, lbs, inch, kg, m, cm |
| Material | Administration β List Of Values β Product LOV | Products | ST, AL, SS, CU (or import via Product LOV) |
| Shape | Administration β List Of Values β Product LOV | Products | PL, RD, SQ, TB, ANG (or import via Product LOV) |
| Grade | Administration β List Of Values β Product LOV | Products (Optional) | A36, 1018, 6061, 304 (or import via Product LOV) - Only required if your products have grades |
Understanding the validation process will help you create error-free imports:
System reads your CSV file and parses all rows into memory. No database changes yet.
Each row is checked for:
You see:
If ANY row has errors: Import button is DISABLED. Fix CSV and re-upload.
If ALL rows are valid: Import button is ENABLED. Click to proceed.
If you click "Confirm Import":
The client template creates:
| Field Name | Required | Default Value | Description & Validation |
|---|---|---|---|
| company_code | β Yes | - | Unique customer code (max 50 chars). Examples: CUST001, ABC123, ACME-TX |
| company_name | β Yes | - | Company name (max 255 chars). Examples: Acme Steel Corp, ABC Manufacturing |
| status | No | ACTIVE | ACTIVE or INACTIVE. Leave blank for ACTIVE |
| industry | No | - | Industry type (max 100 chars). Examples: Manufacturing, Construction, Automotive |
| website | No | - | Company website. Examples: https://example.com, www.company.com |
| csm | No | - | Customer Success Manager initials or code. Examples: JD, SM, JOHN |
| how_found_us | No | - | β οΈ Must match existing How Found Us LOV! Examples: REFERRAL, WEBSITE, TRADE_SHOW |
| payment_terms | No | NET30 | β οΈ Must match existing Payment Terms LOV! Examples: NET30, NET60, COD, CASH |
| credit_limit | No | 250 | Numeric value. Examples: 5000, 50000, 100000 |
| tax_status | No | DEFAULT | DEFAULT, EXEMPT, or TAXABLE. Leave blank for DEFAULT |
| discount_pct | No | 0 | Discount percentage (0-100). Examples: 0, 5, 10 |
| pricing_matrix | No | DEFAULT | β οΈ Must match existing Pricing Matrix LOV! Examples: DEFAULT, PREFERRED, CONTRACTOR |
| delivery_method | No | - | β οΈ Must match existing Delivery LOV! Examples: DELIVER, PICK, WILL_CALL |
| po_mandatory | No | No | Yes or No. Leave blank for No |
| notes | No | - | Internal notes about the customer (max 1000 chars). Examples: Prefers email communication, Important client - requires PO on all orders |
| Field Name | Required | Description & Validation |
|---|---|---|
| MAIN_contact_first_name | β Yes | Primary contact first name (max 100 chars) |
| MAIN_contact_last_name | β Yes | Primary contact last name (max 100 chars) |
| MAIN_phone | β Yes | Phone number. Formats: 555-0100, (555) 555-0100, 5550100 |
| MAIN_email | No | Email address. Must be valid format if provided |
| Field Name | Required | Description & Validation |
|---|---|---|
| MAIN_address_line1 | β Yes | Street address (max 255 chars) |
| MAIN_address_line2 | No | Suite, floor, building (max 255 chars) |
| MAIN_city | β Yes | City name (max 100 chars) |
| MAIN_state_province | β Yes | State or province code. Examples: CA, TX, NY, ON |
| MAIN_zip_postal | β Yes | ZIP or postal code. Examples: 90001, 77001, M5H 2N2 |
| MAIN_country | β Yes | Country code or name. Examples: USA, US, Canada, CA |
different_billing_address is "Yes", the BILLING fields will be processed to create a second address with type BILLING. If "No" or blank, BILLING fields are ignored and no second address is created.
| Field Name | Required | Description & Validation |
|---|---|---|
| different_billing_address | No | Yes or No. Controls whether BILLING address fields are processed. Leave blank for No |
| BILLING_address_line1 | Conditional* | Required if different_billing_address = Yes |
| BILLING_address_line2 | No | Optional billing address line 2 |
| BILLING_city | Conditional* | Required if different_billing_address = Yes |
| BILLING_state_province | Conditional* | Required if different_billing_address = Yes |
| BILLING_zip_postal | Conditional* | Required if different_billing_address = Yes |
| BILLING_country | Conditional* | Required if different_billing_address = Yes |
Example 1: Basic customer with minimal fields CUST001,Acme Steel Corp,,,,,REFERRAL,NET30,50000,,,DEFAULT,No,John,Doe,555-0100,john@acme.com,123 Main St,,Los Angeles,CA,90001,USA,No,,,,,, Example 2: Full customer with separate billing address CUST002,ABC Manufacturing,ACTIVE,Manufacturing,https://abc-mfg.com,JD,WEBSITE,NET60,100000,EXEMPT,5,PREFERRED,Yes,Jane,Smith,555-0200,jane@abc-mfg.com,789 Factory Rd,Building A,Houston,TX,77001,USA,Yes,PO Box 5678,,Houston,TX,77002,USA
The supplier template creates:
| Field Name | Required | Default Value | Description & Validation |
|---|---|---|---|
| supplier_code | β Yes | - | Unique supplier code (max 50 chars). Examples: SUPP001, STEEL-TX, VENDOR-123 |
| supplier_name | β Yes | - | Supplier name (max 255 chars). Examples: Steel Suppliers Inc, ABC Metals LLC |
| status | No | ACTIVE | ACTIVE or INACTIVE. Leave blank for ACTIVE |
| industry | No | - | Industry type (max 100 chars). Examples: Steel Mill, Metal Distribution |
| website | No | - | Supplier website. Examples: https://supplier.com |
| payment_terms | No | NET30 | β οΈ Must match existing Payment Terms LOV! Examples: NET30, NET45, DUE_ON_RECEIPT |
| delivery_method | No | - | β οΈ Must match existing Delivery LOV! Examples: PICK, DELIVER, WILL_CALL |
| tax_status | No | DEFAULT | DEFAULT, EXEMPT, or TAXABLE. Leave blank for DEFAULT |
| po_mandatory | No | No | Yes or No. Whether supplier requires PO numbers. Leave blank for No |
| notes | No | - | Internal notes about the supplier (max 1000 chars). Examples: Lead time is 2-3 weeks, Premium pricing but excellent quality |
Same structure as Client import - see Client Import section for detailed field descriptions.
different_payment_address is "Yes", the PAYMENT fields will be processed to create a second address with type BILLING. This is typically used when payments go to a PO Box or different location than the main business address.
Example: Supplier with separate payment address SUPP001,ABC Steel Mill,ACTIVE,Steel Production,https://abcsteel.com,NET30,DEFAULT,No,Bob,Johnson,555-0300,bob@abcsteel.com,123 Mill Rd,,Pittsburgh,PA,15001,USA,Yes,PO Box 9999,,Pittsburgh,PA,15002,USA
Product LOV (List of Values) defines the building blocks for product classification:
β οΈ CRITICAL: You must populate Product LOV BEFORE importing products!
Products reference material, shape, and grade. If these don't exist, product import will fail 100% validation.
| Field Name | Required | Description |
|---|---|---|
| lov_type | β Yes | Type of LOV entry. Must be: MATERIAL, SHAPE, or GRADE |
| name | β Yes | Code/ID for the LOV entry (max 20 chars). Examples: Aluminum, ROUND, 6061 |
| description | β Yes | Full description (max 125 chars). Examples: Lightweight non-ferrous metal, Solid round bar stock, General purpose aluminum alloy |
| material_name | Conditional* | β οΈ Required ONLY for GRADE rows. Specifies which material the grade belongs to. Examples: Aluminum, Steel, Stainless Steel. Leave blank for MATERIAL and SHAPE rows |
One row = One LOV entry. The lov_type field determines which LOV table the entry goes into:
material_name field is REQUIRED for GRADE rows and must match an existing material name exactly. Grades are linked to materials (e.g., "6061" grade belongs to "Aluminum" material).
lov_type,name,description,material_name MATERIAL,Aluminum,Lightweight non-ferrous metal, MATERIAL,Steel,Carbon steel alloy, MATERIAL,Stainless Steel,Corrosion-resistant steel alloy, SHAPE,Sheet,Flat rolled metal sheet, SHAPE,ROUND,Solid round bar stock, SHAPE,SQUARE,Solid square bar stock, GRADE,6061,General purpose aluminum alloy,Aluminum GRADE,7075,High strength aluminum alloy,Aluminum GRADE,304,General purpose stainless steel,Stainless Steel GRADE,A36,Structural mild steel,Steel
Result: This creates 3 materials, 3 shapes, and 4 grades (with each grade properly linked to its material).
The product template creates:
| Field Name | Required | Default | Description & Validation |
|---|---|---|---|
| product_code | β Yes | - | Unique product code (max 50 chars). Examples: PROD001, ST-PL-A36-025 |
| description | β Yes | - | Product description (max 255 chars). Example: Steel Plate 1/4 x 48 x 96 |
| material | β Yes | - | β οΈ Must exist in Product LOV! Examples: ST, AL, SS |
| shape | β Yes | - | β οΈ Must exist in Product LOV! Examples: PL, RD, SQ, TB |
| grade | No | - | β οΈ Must exist in Product LOV if provided! Optional field. Examples: A36, 1018, 6061. Leave blank if product has no grade |
| size1 | No | - | First dimension (thickness, diameter). Examples: 0.25, 1, 2.5 |
| size2 | No | - | Second dimension (width). Examples: 48, 12, 6 |
| size3 | No | - | Third dimension (length). Examples: 96, 20, 10 |
| unit | β Yes | - | β οΈ Must exist in Units LOV! Examples: pcs, ft, lbs, inch |
| lpf | No | 0 | Pounds per foot or unit (for weight calculations). Examples: 40.8, 0.347, 10.68 |
| avg_cost | No | 0 | Average cost per unit. Examples: 125.50, 8.75, 22.00 |
| reorder_min | No | 0 | Minimum reorder quantity. Examples: 5, 100, 500 |
| reorder_max | No | 0 | Maximum reorder quantity. Examples: 20, 500, 1000 |
| status | No | ACTIVE | ACTIVE or INACTIVE. Leave blank for ACTIVE |
| qty_on_floor | No | 0 | Initial inventory quantity on hand. Examples: 15, 250, 0 |
| last_price_paid_per_unit | No | 0 | Most recent purchase price per unit. Examples: 120.00, 8.50, 0 |
| date_last_received | No | - | Date of last receiving. Format must match selection in import screen (see Date Format Selection below). Examples: 2025-12-15, 12/31/2025, 31/12/2025. Leave blank if never received |
| notes | No | - | Internal notes about the product (max 1000 chars). Examples: High demand item, Stock in 20ft lengths, Special order only, Premium grade |
When uploading a product template, you'll see a Date Format dropdown in the import screen. Select the format that matches how dates appear in your CSV file's date_last_received column:
| Format Option | Example | Common In |
|---|---|---|
| YYYY-MM-DD | 2025-12-31 | ISO standard, technical users, SQL databases |
| MM/DD/YYYY | 12/31/2025 | United States, Excel (US locale) |
| DD/MM/YYYY | 31/12/2025 | Europe, Australia, Excel (EU locale) |
| MM/DD/YY | 12/31/25 | United States (short year) |
| DD/MM/YY | 31/12/25 | Europe, Australia (short year) |
date_last_received columndate_last_received column must use the SAME format. Mixing formats (e.g., some rows with MM/DD/YYYY and others with DD/MM/YYYY) will cause validation errors.
product_code,description,material,shape,grade,size1,size2,size3,unit,lpf,avg_cost,reorder_min,reorder_max,status,qty_on_floor,last_price_paid_per_unit,date_last_received,notes PROD001,Steel Plate 1/4 x 48 x 96,ST,PL,A36,0.25,48,96,pcs,40.8,125.50,5,20,ACTIVE,15,120.00,2025-12-15,High demand item PROD002,Aluminum Round 1 inch,AL,RD,6061,1,,,ft,0.347,8.75,100,500,ACTIVE,250,8.50,2025-11-20,Stock in 20ft lengths PROD003,Steel Round 2 inch (no stock),ST,RD,,2,,20,ft,10.68,15.00,0,0,ACTIVE,0,0,,Special order only PROD004,Stainless Tube 1x1x16ga,SS,TB,304,1,1,16,ft,1.3,22.50,50,200,ACTIVE,75,22.00,2026-01-10,Premium grade
Note: PROD003 shows an empty grade field (demonstrating it's optional), and all examples include notes in the last column.
| Export Type | Description | Use Case |
|---|---|---|
| Clients | All customer data with contacts and addresses | Backup, analysis, migration to other systems |
| Suppliers | All supplier data with contacts and addresses | Backup, vendor analysis, migration |
| Product and Inventory | Complete product catalog with current inventory levels, costs, and reorder quantities in a single consolidated file | Inventory reports, price lists, stock analysis, valuation, audit |
| GL Activity | Financial transactions for date range | Accounting, reconciliation, external reporting |
Not yet. Import currently creates new records only. To update, you must edit manually in the application. Bulk update feature planned for Phase 2.
Not via template. The template creates 1 MAIN contact per customer. To add more contacts, use the application's contact management features after import (Clients β Select Customer β Hamburger Menu β Manage Contacts).
Duplicate error. The second import will fail with duplicate ID errors. Each company_code/supplier_code/product_code must be unique.
No, CSV only. You can use Excel to edit, but must save as CSV before importing. Excel format support planned for Phase 2.
Maximum 10,000 rows. For larger imports, split into multiple files and import sequentially.
No. Import only creates new records. Duplicate IDs are rejected with errors.
Not yet. Currently supports: Clients, Suppliers, Products, Product LOV. QOI/PO import planned for Phase 3.
No. Only required fields (marked with β in the field reference tables) must be filled. Optional fields can be left blank and will use default values.
Not recommended. Extra columns will be ignored. Stick to the standard template structure for best results.
Import creates maximum 2 addresses. For additional addresses, add them manually in the application after import (Clients β Select Customer β Hamburger Menu β Manage Addresses).
Most common reason: LOV values don't exist. Double-check that all payment_terms, how_found_us, pricing_matrix, material, shape, grade, and unit values exist in your system before importing.
Contact support: