Holdings Workbench

Find the patterns in your 866 holdings, confirm what they mean, convert to 853 / 863
pymarc installed
Text size
1

Holdings

📁 Drop a MARC file here, or click to browse
Pasted statements are enough to work out patterns. Converting a file needs the file itself.
Pattern library

Every pattern confirmed so far, kept for this visit. They are tried in turn before the standard parser, so what is listed here is what will read your holdings. Remove any that should not be used, or export them to load again next time.

Export
MARC Holdings Workbench v0.49.0
Proof of concept — under active development. Check your output before loading it into the catalog.

One tool for MARC serials holdings. Upload a MARC file, find the patterns in its 866 statements, confirm what each part of a pattern means, and convert to structured 853 caption/pattern and 863 enumeration/chronology fields. Statements no pattern matches are converted by the standard parser.

No license is granted at this time; the repository is published for reference only while institutional intellectual property rights are reviewed. See NOTICE.md.

Portions derive from extract.py by Phani Chaitanya Pendyala (MIT). See THIRD-PARTY-NOTICES.md.

Questions: Matthew Codey, codey@usc.edu

What has changed

v0.49.0 2026-10-30
With a file, statements held or to check are put right on their records in step 3, where the rest of the record is in view; Edit and Split in step 2 open them there.
v0.48.0 2026-10-29
Nothing on the screen or in your records changed. The page's code is now in files of its own, and a new code map says which file does what.
v0.47.1 2026-10-29
The advice to keep the 866 for wording MARC has no code for now says to check first that your system keeps it.
v0.47.0 2026-10-29
Wording MARC has no code for, like "Third Quarter" or "Buyers Guide", no longer costs the 863 its year, and the message says what MARC 21 lets you do with it.
v0.46.1 2026-10-29
Every pattern card that wants an answer now says "needs a decision", and a one-page quick start for cataloguers trying the Workbench for the first time.
v0.46.0 2026-10-16
The workbench can be used from the keyboard alone and with a screen reader: a file can be chosen without a mouse, and every button and tick box says what it is for.
v0.45.1 2026-10-16
Find patterns shows its cards in under two seconds on a 372-record file, where it took about seven.
v0.45.0 2026-10-16
A pattern card's statements to look at are grouped by reason, each explained once, with the change or where reading stopped on each row.
v0.44.1 2026-10-16
Clearing the pattern library starts over: Find patterns fills it again, even after uploading a file.
v0.44.0 2026-10-16
An open record in step 3 can be closed from its foot, and stays on screen while you work on it; every edit or split says whether it fixed the statement.
v0.43.0 2026-10-16
Each pattern card lists its statements to look at, every one, with its record and Edit and Split; buttons by kind, with counts, narrow the Patterns step to the held, to check, not read or left out.
v0.42.0 2026-10-16
Held statements show where they come on the record, with Edit and Split beside them; a card says when the parser can't read a statement, and where it stopped; editing from a card no longer folds the Patterns step.
v0.41.0 2026-10-16
A pattern never converts part of a statement; a list whose years go backwards is marked to check; the last run of a list can be left open in its years; a statement can be edited from its pattern card.
v0.40.0 2026-10-16
Lists of months or seasons written under one year, and lists of volumes paired with lists of years, now convert; the pattern library can be seen, exported, imported and cleared as soon as the page opens.
v0.39.0 2026-10-15
The Patterns step says which statements are held or to check, and no longer folds them away under "nothing to decide".
v0.38.0 2026-10-15
Numbering ($v) can be set for one record, in "This record's 853".
v0.37.1 2026-10-15
A statement read by a pattern as more levels of numbering than an 853 has room for is held with its reason, instead of stopping the record with "could not check".
v0.37.0 2026-10-15
A serial that changes from months to seasons, or back, gets a second 853 from the change, and you say where the change falls: a change inside one 866 is held until you split it, and a change between 866s is marked to check.
v0.36.0 2026-10-14
A pattern's expression can be copied for the tool you will use it in: PCRE, JavaScript, Java, .NET, MarcEdit, Alma normalization rules or Oracle SQL for Alma Analytics, as well as Python.
v0.35.0 2026-10-12
Issues per volume (853 $u) can be set for one record, in "This record's 853".
v0.34.0 2026-10-08
A value read correctly but left out because MARC has no place for it is now called "left out to fit MARC", shown everywhere it happens, and a setting decides whether such a statement converts, is held, or leaves its record as uploaded.
v0.33.0 2026-10-08
Each record has its own 853 settings: its frequency ($w), and captions for the levels its statements leave blank. Frequency now starts at "not specified".
v0.32.0 2026-10-08
A statement that says it is a supplement or an index is held with its own reason, naming the field it belongs in, and a pattern no longer drops words silently.
v0.31.5 2026-10-08
Confirming a pattern with its suggested caption accepted as offered now clears "needs a decision".
v0.31.4 2026-10-01
On a pattern, the settings that would change nothing are greyed out, with a note that the statement itself is where to correct them.
v0.31.3 2026-10-01
The tool is called the MARC Holdings Workbench throughout.
v0.31.2 2026-09-30
A file set aside for pasted statements comes back with one click, and is named.
v0.31.1 2026-09-30
Holdings come from a file or from pasted statements, never both at once; patterns found from pasted statements are shown open.
v0.31.0 2026-09-30
Each 866's declared notation (its second indicator and $2) is now noted where it matters, without changing what is converted.
v0.30.6 2026-09-30
A list of single dates written as prose ("Jun. 17, 1880; Oct. 4, 1883") is held whole instead of recording only the last year.
v0.30.5 2026-09-30
A statement ending with a full stop ("v.89,pt.1(1969)-v.96,pt.3(Dec.1972).") now converts instead of being held for the full stop.
v0.30.4 2026-09-30
A month written straight against its year ("Sept.1932") is read; before, the year was lost and a month could be recorded wrongly.
v0.30.3 2026-09-25
A warning that needs a decision is now orange and headed "To check:", so it stands apart from warnings that are only for the log.
v0.30.2 2026-09-25
An 866 that holds the values of an 863 written out as text is now named as such, instead of "No recognisable holdings ranges found".
v0.30.1 2026-09-25
An open end written inside the parentheses ("v.35 (2025-)") is kept, instead of being dropped without a warning.
v0.30.0 2026-09-25
Dates written after the numbering without parentheses ("v.3-36 1963-1995") are now read.
v0.29.1 2026-09-25
A year written before a volume ("1990: v.1") is read as its date, not as a level above the volume.
v0.29.0 2026-09-25
A range inside one end of the holdings ("nos. 1-3" at the start) is recorded by its first and last part, and the record says so.
v0.28.0 2026-09-25
Holdings that Alma writes back from this tool's 853/863s now convert to the same 853/863s again, and a check proves it.
v0.27.0 2026-09-25
A strict setting for the standard parser: convert a statement only if all of it can be read.
v0.26.0 2026-09-25
Each pattern shows its expression, with a Copy button, and can show you the records it touches.
v0.25.2 2026-09-24
A month written with a full stop ("Jan.") no longer makes a pattern of its own, and an uncertain year like "2016?" no longer says it was not converted when it was.
v0.25.1 2026-09-23
Ticking Skip no longer opens the record and moves the cursor to its note box.
v0.25.0 2026-09-23
Write your own note on a record -- a reminder for you or a colleague that goes into the log, never into the record.
v0.24.2 2026-09-23
A skipped record no longer stays under "Needs attention".
v0.24.1 2026-09-23
The review list shows at most 50 records a page.
v0.24.0 2026-09-23
A session log: a spreadsheet of every record with something to look at, to take back to your catalogue or MarcEdit.
v0.23.1 2026-09-23
A file with an 866 that carries only a note no longer stops the records being checked, and one record the tool cannot handle no longer stops the rest.
v0.23.0 2026-09-23
Correct an 866 in the Workbench: an Edit button beside each 866 re-checks the statement and regenerates its 853 and 863s.
v0.22.0 2026-09-23
853s and 863s already on a record are kept unless you ask for them to be cleared.
v0.21.0 2026-09-22
An 853 that carries a count in $u is now written as able to compress or expand.
v0.20.1 2026-09-22
The 853 indicator boxes in Conversion settings accept only the values MARC 21 defines.
v0.20.0 2026-09-22
The notes about the Leader above the review list can be hidden, and stay hidden in this browser.
v0.19.0 2026-09-22
Choose how many records the review list shows at once: 5, 10, 25, 50, or all of them.
v0.18.1 2026-09-22
The count at the top of a conversion no longer includes the records you skipped.
v0.18.0 2026-09-22
Records converted one at a time now stay converted, and each can be downloaded on its own.
v0.17.6 2026-09-21
The 853 and 863 fields are written in their proper place in the record, instead of after everything else.
v0.17.5 2026-09-21
The browser tab now shows the site's icon instead of a blank page symbol.
v0.17.4 2026-09-21
"Issues per volume" is written where issues are counted, and a serial with three levels of numbering is left alone rather than guessed at.
v0.17.3 2026-09-21
Recording at level 3 reports how many records carry more than that, once, instead of marking two thirds of them.
v0.17.2 2026-09-21
The notices above the record list read as sentences again, instead of breaking into columns with gaps through them.
v0.17.1 2026-09-19
A run written as "(1960-66)" now records both years instead of losing the second.
v0.17.0 2026-09-18
A run of years written as a list no longer loses all but the first of them, and records coded as single items while holding serials are counted for you.
v0.16.1 2026-09-18
The encoding level is reported once for the file instead of on almost every record, and "Needs attention" means something again.
v0.16.0 2026-09-18
You can state how many issues make a volume, and the tool writes it into the 853 where the standard puts it.
v0.15.1 2026-09-18
A note in curly braces no longer costs a statement its holdings.
v0.15.0 2026-09-18
When a file carries no 999 $b, the tool offers the fields that file does carry, instead of leaving a blank where the number should be.
v0.14.0 2026-09-18
Each record on the Convert step now shows the number you look it up by, and a Find box searches the whole file for one.
v0.13.1 2026-09-18
After updating the tool, refreshing the page is enough to see the new version. It used to need the server stopped and started again, without saying so.
v0.13.0 2026-09-18
You tell the tool which level your library reports holdings at, and it writes that into every 863. A record whose Leader says something different is marked for your attention, and left alone.
v0.12.5 2026-09-17
Convert shows ten records at a time instead of the whole file, so the buttons below the list are no longer a long scroll away.
v0.12.4 2026-09-17
An 863 recording a single issue no longer describes itself as a compressed range. The code that says which it is now matches the field it sits on.
v0.12.3 2026-09-17
A serial numbered by volume alone no longer gets a numbering-continuity code the standard does not allow there.
v0.12.2 2026-09-17
A record with a part of its statement the tool could not read is now marked as needing attention, instead of only carrying a warning you would have to open the row to see.
v0.12.1 2026-09-17
A statement beginning with an ordinal — "50th Anniversary Issue" — is still refused, but the message no longer quotes a piece of a word that was never there.
v0.12.0 2026-09-16
The 853 now declares every level a statement shows the serial has, including one its own 863 cannot record a value for — and stops declaring a month where the statement never gave one.
v0.11.2 2026-09-16
Starting the tool no longer prints a warning about the program's own code. Nothing about how statements convert has changed.
v0.11.1 2026-09-16
Confirming a pattern now says what your answer will change — the reading of a statement, a caption, or nothing at all — and stops asking where the answer would change nothing.
v0.11.0 2026-09-16
The Converter and the Pattern Detector are now part of the one tool rather than separate sites. Everything they did is still here.
v0.10.1 2026-09-16
A MARC file containing a record that cannot be read no longer fails with a server error. It is refused, and the record is named.
v0.10.0 2026-09-16
A confirmed pattern and the standard parser can no longer read the same statement two different ways. Five statements that produced nothing now convert, and eight stop declaring a month caption they never fill.
v0.9.9 2026-09-15
A statement that is only a year spanning the turn of one — "1996/97" — now converts instead of coming out empty.
v0.9.8 2026-09-15
Holdings written as two ranges either side of a slash are both recorded. One of them used to disappear, along with most of the other.
v0.9.7 2026-09-15
Fixes a mistake in 0.9.6: a date range like "(Jan/Feb-July/Aug 1985)" was being refused and marked for review.
v0.9.6 2026-09-15
"Late Summer" is no longer recorded as Summer. Wording the tool cannot code is named, and the record is flagged for you to look at.
v0.9.5 2026-09-15
An issue number under a volume range is named rather than written, because a compressed 863 cannot say which volume it belongs to.
v0.9.4 2026-09-15
A combined issue like "no. 8/9" is read as one issue again, instead of being split in half and filed under the wrong levels.
v0.9.3 2026-09-15
A confirmed pattern now gives way to the standard parser for any statement holding several runs of holdings, not just a comma list.
v0.9.2 2026-09-15
The summary after converting a whole file is now readable: figures first, then a table of which pattern read what.
v0.9.1 2026-09-15
Uploading a MARC file no longer deletes a pattern library you confirmed earlier.
v0.9.0 2026-09-11
Year-first statements no longer have "volume" and "issue" read into them, and an issue that was landing in the volume's subfield is put right.
v0.8.9 2026-09-11
A level the piece does not caption is now written as having no caption, instead of being called a volume on the tool's say-so.
v0.8.8 2026-09-11
A date that covers a whole statement is no longer copied onto each of its runs, and the pattern preview works again for statements you paste in.
v0.8.7 2026-09-11
An expression that never finishes is now stopped instead of hanging the server, and one warning no longer reads like a typo.
v0.8.6 2026-09-11
The Workbench now handles holdings written as a list with gaps the same way the Converter does.
v0.8.5 2026-09-11
Holdings written as a list with gaps in it are read properly — one 863 for each run, and a break indicator saying where the gaps are.
v0.8.4 2026-09-11
A range that names one level at its start and a different one at its end is no longer read backwards.
v0.8.3 2026-09-11
Longer patterns are allowed: the limit was turning away expressions the tool legitimately produces.
v0.8.2 2026-09-11
The detector no longer offers a pattern it would then refuse to test.
v0.8.1 2026-09-11
A year split across the turn of one — "Winter 1996/97" — is read and recorded in full.
v0.8.0 2026-09-03
Day-level dates are recorded. Nothing in the test corpus is now lost without saying so.
v0.7.4 2026-09-03
A record numbered more deeply than any serial plausibly is now says so instead of looking ordinary.
v0.7.3 2026-09-03
The filters now answer for the whole file, and a record can send you back to the pattern that read it.
v0.7.2 2026-09-03
Set a shape or a record aside, and the tool leaves it exactly as it is.
v0.7.1 2026-09-03
The Patterns step folds up, and patterns that need nothing from you stay out of the way.
v0.7.0 2026-09-02
Enumeration is no longer volume-then-issue: a title can be numbered any way it likes, to any depth.
v0.6.4 2026-09-01
Fewer patterns to confirm, dates read to the day, and nothing but codes in a coded subfield.
v0.6.3 2026-09-01
Statements the parser can only partly read are now held for review instead of half-converted.
v0.6.2 2026-09-01
A range now records both of its ends, and says which value it could not place.
v0.6.1 2026-09-01
Two corrections: a pattern can no longer convert half a statement, and every 863 now says it is compressed.
v0.6.0 2026-08-25
A new Holdings Workbench: find a pattern, say what it means, convert with it.
v0.5.2 2026-08-21
Holdings the converter cannot read are no longer deleted.
v0.5.1 2026-08-21
Holdings that use slashes between their ranges now produce patterns.
v0.5.0 2026-08-04
Corrected how 853s are numbered, and made previews appear on their own.
v0.4.0 2026-08-04
Rebuilt both interfaces for readability.
v0.3.0 2026-08-03
The converter learned a second holdings format and stopped guessing.
v0.2.0 2026-07-30
Pattern detector made usable on messy holdings.
v0.1.0 2026-07-24
First working version.