Secondary marketing isn't one loan at a time — it's hundreds or thousands. Bulk Pricer takes a spreadsheet of loans, runs every one through the same Program & Pricing engines as a single scenario, and rolls the results into a dashboard and an exportable bid — all in a workspace completely isolated from your production pipeline.
A full, multi-page site for institutional-scale batch pricing — the Loan Pricer engine, run across thousands of loans at once. One of the flagship product domains we own; this page is just the overview.
Explore BulkPricer.com →Throughput from the platform's own processing — not a projection.
Bulk loans live only in per-client staging tables and an in-memory cache — never the production loan schema. The engine runs in test-only mode: no loan-table writes, no logging side-effects. A 5,000-loan batch can be priced, re-priced, and discarded without touching — or risking — a single real loan in your pipeline.
Open any stage, then walk the whole flow with Prev / Next.
From a single eligibility check to a full parallel batch.
The architecture a technical evaluator will want to see.
The production UI writes to the 13-table loan schema. Bulk Pricer builds a loan object from each staging row and calls the engine with testOnly: true — the write step is skipped, the pipeline runs in memory, and results land in per-client staging tables and a short-lived cache.
Batches run with Parallel.ForEachAsync and a configurable degree of parallelism — thread-safe counters, a fresh executor chain per loan, pooled connections, and a rate-limited geocode fallback for missing county/census data.
Each loan prices its note rate only — not the full rate matrix — a fraction of the work per loan. That's the optimization that makes thousands-of-loans batches feasible while reusing the exact production engines.
Conversion splits every batch into clean loans and error rows — a missing required field or an unmappable value is captured against its source row (loan number and borrower), reported back, and skipped, never fatal to the batch. Every result traces to its originating spreadsheet line.
A large upload enqueues instantly and returns; pricing happens off the request thread on a hosted background worker, and the client polls for progress. The queue is a bounded, in-process channel that applies backpressure when full — no external message broker to deploy, secure, or operate.
Each staged row becomes the same loan object the single-loan form builds, priced through the exact same engines — no parallel "bulk-only" calculator to drift. A price on a 5,000-loan bid tape is the price that loan would have received one at a time.
A guided walkthrough and the architecture detail are available in the private data room.
Request Private AccessBring the loans in — a bid tape from a counterparty, a portfolio extract, or a what-if scenario set.
The File workspace manages source spreadsheets per client: upload, pick the sheet to import, and remove old files. The source file is stored against the client so a recurring format is always at hand.
The accuracy lever. Point each spreadsheet column at the loan field it represents — once.
Mapping ties each column (and, where needed, its values) to a loan field, then saves it as a reusable map for that vendor format. The same tape maps the same way every time. A Scan loads the mapped rows into the staging area, ready to price.
A mis-mapped column feeds wrong data to a correct engine — producing wrong-but-plausible results. The reusable, validated map is what keeps a batch trustworthy.
Every staged loan runs through the same Program & Pricing engines as a single scenario — just isolated and optimized for volume.
In the workspace you can test a row's eligibility, price a single loan in full, or run the whole set as a parallel job. A query builder filters and selects which staged loans to run.
The engine is invoked in test-only mode — no production writes, no debug-log rows — and prices in single-rate mode (note rate only). Batches run in parallel with a configurable degree of concurrency.
testOnly: true — in-memory pipeline, no loan-table writesParallel.ForEachAsync, configurable parallelismA rollup of the whole batch — and a drill-in to any single loan.
The dashboard breaks the run down by outcome — priced, failed, counter-offer, and no-pricing — so an analyst sees the shape of the tape at a glance and can drill into any loan's full result. Portfolio-level weighted-average statistics — coupon, price, FICO, and LTV — summarize the whole tape, the numbers a desk needs to size a bid. Need to re-run against current pricing? Reprocess is one click — and safely cancellable, restoring the prior results if you stop it mid-run.
Package the priced results into an investor-ready bid — built the way a secondary desk works.
Assemble the response with a drag-and-drop bid-tape builder, then export a Bid Summary PDF organized into sections by plan type — Conforming, Jumbo, and more — each loan with its rate, LTV, FICO, and best-execution result, and each section totaled with its weighted-average coupon, price, FICO, and LTV — the figures an investor actually bids on. From raw tape to a deliverable a desk can hand to investors or management, without leaving the platform.