I’ve taken a look at the source code for import_items located here https://github.com/apmuthu/FA24extensions/blob/master/Extensions/import_items/import_items.php. I can see exactly why your import is failing. This specific script is very rigid about how it expects data to be structured.
Here is the breakdown of the issues and how to fix them.
Note: there could be a variation if you are using a different version of the plugin!
1. The Header and Delimiter Mismatch
You mentioned your header looks like this:
ITEM;ITEMCODE;STOCK_ID;Description;Category;units;;MB_FLAG;Currency;Price;
The key code in the file is this
list($type, $code, $id, $description, $category, $units, $qty, $mb_flag, $currency, $price) = $data;
The Issues:
The Separator: You are using semicolons ( ; ), but the PHP code defaults to a comma ( , ).
The Column Count: Your header has 11 potential slots (counting the double semicolon), but the script uses list() to assign exactly 10 variables.
The Script's Internal Map: In the code, the variables are assigned in this specific order:
type (Must be "ITEM")
code (Item Code)
id (Stock ID)
description
category
units (e.g., 'each')
qty (The script uses this column for Dimensions)
mb_flag (B, M, D, or A)
currency
price
2. The Correct CSV Structure
To get "joy" from this import, your CSV file must follow the logic in line 169 of the code. Do not use semicolons unless you manually change the "Field separator" box in the FA interface to a semicolon before hitting import.
Recommended Header (Standard Comma Separated):
TYPE,ITEM_CODE,STOCK_ID,DESCRIPTION,CATEGORY,UNITS,DIMENSION,MB_FLAG,CURRENCY,PRICE
(Note the script skips the first line so header isn't important for import)
Example Data Row:
ITEM,101,101,Widget Pro,Components,each,,B,USD,15.00
Note on MB_FLAG:
B: Bought (Purchased items)
M: Manufactured (Produced in-house)
D: Service (No stock tracking)
3. Why Export "Is anything but CSV"
The code handles exports in a very "raw" way (Lines 112–134). It tries to force a download by echoing strings directly.
If the export looks like gibberish or a messy webpage, it’s usually because the server is appending HTML or notices to the file. When you export, ensure your browser isn't blocking the download and try opening the file in a plain text editor (like Notepad++ or TextEdit) rather than Excel first to see the raw structure.
Troubleshooting Checklist
Column 7 (The "Dummy" or Dimension): In your header, you had two semicolons together (;;). The script interprets that empty slot as the Dimension. If you don't use dimensions, leave it empty but keep the comma there.
Category Name: The CATEGORY in your CSV must match the "Description" of a category already in FA, or the script will try to create a new one using the default GL accounts you selected on the import screen.
Case Sensitivity: The script runs strtoupper($type). Ensure your first column always says ITEM in all caps.
I know you stated you didn't want to use SQL and that is why I mentioned phpmysql it has a graphical user interface to access the database tables like any spreadsheet editor and supports importing and exporting tables of various formats including CSV. It is a very useful tool since you can import and export from any SQL table not just one specific table through a script and do not have to import any SQL statement to do so.
One final note remember that the data must be compatable format that front and the db expects
Example
stock_id varchar(20) Primary Key. This is the unique identifier (e.g., "WIDGET-01"). No spaces are best. Max 20 characters
category_id int Foreign Key. Note that the CSV script asks for a Name, but the table stores an ID. The script does the lookup for you. But it must exist
mb_flag char(1) 1 character: B (Bought), M (Manufactured), D (Service/Dummy), or A (Assembly).
units varchar(20) 20 character max again and Must match an entry in the item_units table (e.g., "each", "hr", "box")..