If you have hundreds of published PDFs and a spreadsheet of metadata, the goal is to get them into OJS as proper issues — not as one-off manual uploads. This guide covers the practical path for OJS 3.3 and 3.4 (and notes where 3.5 differs).
Prefer a managed import? See back-issue & archive import.
Prepare the metadata sheet
Build one row per article. At minimum you need: section, title, authors (with affiliations), abstract, keywords, page range, publication date, and a path to the galley PDF. Use a consistent delimiter for multi-author fields. Download a starter template from the metadata checklist.
Community tools such as tsvConverter can turn a TSV/CSV sheet into OJS Native XML. Search for “tsvConverter OJS” if you want the free converter many technical editors use.
Create sections and user accounts first
Native XML import expects journal sections to already exist, and it needs a real user account to own the imported submissions. Create sections with the exact titles your XML will reference, and note the username you will pass to the CLI.
Convert to Native XML
Generate one Native XML file per issue (preferred for large archives). Validate against the schema for your exact OJS version — Native XML is not portable across major versions (a 3.4 export will not import cleanly into 3.5 without conversion).
Import with the CLI, not the web uploader
From the OJS installation root:
php tools/importExport.php NativeImportExportPlugin import /path/to/issue.xml journal-path username
Check plugin usage on your install first:
php tools/importExport.php list
php tools/importExport.php NativeImportExportPlugin usage
For large files, raise memory:
php -d memory_limit=512M tools/importExport.php NativeImportExportPlugin import /path/to/issue.xml journal-path username
The web Import/Export UI often times out on multi-issue archives and can leave partial data behind. Batch per issue on the command line instead.
Syntax is the same pattern on OJS 3.3 and 3.4. On newer releases, always confirm with NativeImportExportPlugin usage — argument order can change between major versions.
Rebuild the search index
After a large import, rebuild the search index so articles are findable. On a typical install:
php tools/rebuildSearchIndex.php
Then spot-check: article counts per issue, galley downloads, author names, and a few DOI landing pages if DOIs were assigned.
When to hire help
If nobody on the team has both time and CLI comfort — or if DOIs must be minted and deposited retrospectively — see back-issue & archive import and the companion guide on retrospective Crossref deposit.
Need the archive imported for you?
Galleys.pub runs back-issue and archive imports into OJS with metadata mapping, staging verification, and Crossref deposit. Reply within 24 hours.
Back-issue & archive import Scope my archive