Reporting Layer · Houston, TX

The 3PL reports your warehouse system won't build.

Your warehouse management system runs the floor well. It reports badly. The data is in there — receipts, picks, shipments, on-hand, billing — and you can't reach it, can't join it, and can't build the one view you actually need. So somebody rebuilds it in Excel every month. We pull that data out on a schedule, land it in a database you own, and build the reports properly. The system stays. We just read from it.

Sound familiar?

Eight reasons the answer lives in a spreadsheet

None of these are your team working badly. They're what happens when the only way out of the system is an export button.

The report you need isn't in the list

The built-in reports answer the vendor's questions. Yours is one column over, and the report builder won't go there.

You can't reach your own data

Your operational history lives in someone else's database, behind a login that only shows you screens. You cannot query it.

The same export, every month

Somebody pulls three CSVs, joins them in Excel, fixes the same four things by hand, and sends the file. Every month.

Two answers to one question

Billing says one number, the floor says another, and the spreadsheet in between has a filter nobody remembers setting.

Customers ask you for numbers

They want their own receipts, their own on-hand, their own on-time rate. Right now that request lands on a person.

Reporting waits on one person

One person knows how to build it. When they're out, or busy, or gone, the question waits — and then stops being asked.

The invoice went out light

The floor did the work — the rush, the relabel, the extra handling — and no line on the invoice says so. Nobody finds out until margin review, if then.

You hear about misses from the customer

The late order surfaces in their email, not your report. By the time you see the number, you're apologizing for it.

Nobody sells the layer on top.

The vendor sells you the warehouse management system, and it earns its keep — the floor runs on it. But its job is running the operation, not answering questions about it. So the reporting stops at whatever the report builder was designed to cover, your own database is somewhere you can't log into, and the gap gets filled by a person with a spreadsheet. We're not here to replace anything. We read from the system you already run and build the part nobody sold you.

How it works

Four steps, and none of them touch your floor

Read-only from the first day to the last. Your pickers, packers, and billing clerks never see a change.

  1. 1

    Get read access

    You create a read-only account in your own system. We use its API where there is one, a scheduled export where there isn't. Nothing we build ever writes back.

  2. 2

    Land it in your database

    Orders, receipts, inventory, shipments, and billing land in a database in an account with your name on it. Full history on the first load, changes after that.

  3. 3

    Build the reports you actually asked for

    We start from your questions, not a template. Each number gets one definition, written down, so two reports can't disagree.

  4. 4

    Put it on a schedule and hand it over

    The refresh runs on its own and tells us when it doesn't. You get the queries, the credentials, and the documentation.

If the extract turns out to be the easy half and the real problem is two systems disagreeing, that's system integration — and we'll say so before you spend anything on reports.

What you get

Four things, and you keep all of them

Reports built to your questions, a database in your own account, a refresh that runs itself, and the documentation to hand to anyone.

Reports Built to Your Questions

The ones your warehouse system won't build, written to the question you actually asked.

  • Receiving, putaway, pick, pack, and ship measured the way your floor runs
  • Storage, handling, and accessorial billing reconciled against what was invoiced
  • Inventory accuracy, aging, and dead stock by client, not just in total
  • On-time and short-ship rates you can put in front of a customer
  • One definition per number, written down, so two reports can't disagree

A Database You Own

In your cloud account, under your billing, with your name on the credentials.

  • PostgreSQL or SQL Server, in an account you control from day one
  • Point Power BI, Excel, Metabase, or anything else that speaks SQL at it
  • Your analyst can query it directly without asking us for anything
  • Full operational history kept, including the periods your system trims
  • If we part ways, the database, the queries, and the schedule stay with you

A Refresh That Runs Itself

On a schedule you pick, with an alarm when it doesn't run.

  • Nightly by default, hourly where the decision is worth the extra load
  • Incremental after the first load, so we're not re-reading years every night
  • Rate limits and paging respected, off-hours where the system prefers it
  • Row counts checked on every run, so a short load fails loudly
  • Plain Python jobs and SQL views — code your next engineer can read, not a licensed ETL platform
  • A failed refresh reaches us before it reaches the person reading the report

A Self-Serve View & the Documentation

So people stop asking a person, and so the next person can pick it up.

  • A view your team opens themselves, with the filters they were asking for
  • A customer-facing view when it makes sense, scoped to that customer's data
  • Every field mapped: where it came from, what it means, what it excludes
  • The schedule, the queries, and the failure procedure written down
  • Handover to your team or your BI tool of choice, on request, not on renewal
The report library

The reports, by name

Every engagement starts from your questions, but most of them land on reports with names. These are the ones that come up again and again — grouped by the question they answer.

Billing & Margin

What the floor did, lined up against what the invoice said. This group is usually where the first report comes from, because it touches money directly.

Storage billing reconciliation

Locations and pallets actually occupied, by customer and by day, against what the invoice charged for.

Accessorial capture

Work the floor performed — kitting, relabeling, rework, rush handling — that never became an invoice line, found while it can still be billed.

Unbilled activity at cutoff

Everything that happened this period with no charge attached yet, on one page, before the invoice run instead of after it.

Cost-to-serve by customer

What each account takes in touches, space, and time, next to what it pays. The renewal conversation reads differently with this in hand.

Inventory

Counts you can defend — to a customer, to an auditor, and to your own billing.

Aging & dead stock by client

How long inventory has sat, bucketed the way you bill, per customer — because storage that never turns is a conversation someone should be having.

Cycle count accuracy, trended

Accuracy by zone, by counter, by week — so a bad month shows up as a slope, not as a surprise at the annual count.

Lot & expiry exposure

What expires next, where it sits, and whose it is — before the disposition decision gets made for you.

Negative & stuck on-hand

Quantities below zero and inventory frozen in a status nobody remembers setting: the data problems that quietly bend every other number.

Service & the Floor

The numbers your customers are already estimating about you. Better that you hold the accurate version.

On-time ship & SLA scorecard

Shipped against promised, per customer, measured the way the contract words it — so the number you quote is the number they'd compute.

Fill rate & short-ship

Ordered against shipped, line by line, with the reason attached wherever the system recorded one.

Dock-to-stock

Arrival to putaway, by customer and by door, in hours — the receiving number a customer's planner asks about first.

Order cycle time

Received to picked to shipped, stage by stage, so a slow week points at a stage instead of at everyone.

Customer-Facing

Reports your customers read directly. Answering before they ask is the cheapest retention work there is.

The weekly scorecard pack

One page per customer — receipts, shipments, on-time, on-hand — generated and sent on a schedule, without anyone assembling it.

A customer-scoped view

A login that shows a customer their inventory and their orders and nothing else, so the recurring email request can retire.

The standing data request

That one export a customer insists on, produced in the shape they asked for and delivered automatically — to an inbox or an SFTP drop.

If what billing actually needs is a rate engine — charges computed, not reconciled — that's the billing side of the 3PL & warehouse software practice, and the two share the same data.

Beyond the dashboard

Five shapes a report can take

The best report is often the one nobody has to remember to open. Part of the work is choosing the shape that fits how the answer will actually get used.

A dashboard, when someone will open it

The classic, and still right for the morning numbers. But a dashboard only earns its keep if opening it is already somebody's habit.

A schedule, when they won't

The Monday email, the month-end pack, a post into the Teams or Slack channel the shift already reads. The report arrives; nobody has to remember it exists.

An alert, when no news is good news

Silence until a number crosses a line you set — an order past its ship-by, stock past the age you bill differently, activity still unbilled at cutoff. The rest of the time it costs nobody any attention.

A scorecard, when the reader is your customer

Generated per account, scoped to that account's data, sent on a schedule. You approve the definition once; it goes out every week after that on its own.

A reconciliation, when two systems disagree

Both answers to the same question, side by side, differences on top — so the argument is about the fix instead of about whose number to trust.

Read-onlyNothing we build writes back to your system of record
YoursThe database, the credentials, and the queries
Any SQL toolPower BI, Excel, Metabase — point it wherever you like
DocumentedEvery field mapped, every schedule written down
Vendor-neutral by design

What we can extract from today

Not a partner list and not a certification list — just where the work has already been done, and how the data comes out.

System of recordHow we read it
Extensiv 3PL Warehouse Manager Its REST API, on a read-only service account you create.
NetSuite A read-only integration role, queried through SuiteQL or an ODBC connection where you already license one.
Dynamics 365 Business Central The OData and API endpoints, scoped to the companies you name.
ShipHero Its GraphQL API, paged and rate-limit aware.
CartonCloud Its REST API, one tenant at a time.
Infoplus Its REST API, per table, with changes picked up incrementally.
QuickBooks The Online API for the billing side. Desktop becomes a scheduled export instead.

CargoWise is a different conversation

We'd rather say that than list the name and work it out afterwards. Getting operational data out of CargoWise is its own project, with access questions to settle before anyone promises a report. If that's what you run, still call — just expect the first conversation to be about scope rather than about reports.

Your system isn't on the list? Ask anyway. What decides it is whether the system has an API or can produce a scheduled export — not whether we've seen its logo before.

Two things worth saying up front

The first: this does not replace your warehouse management system, and we would talk you out of it if you asked. Replacing the system that runs your floor to fix a reporting problem is the most expensive way to get a report. The system stays, the floor keeps working, and we read from it on a schedule.

The second: a reporting layer cannot settle a disagreement between two systems. If billing and the floor hold different numbers, someone has to decide which one is right before a report can be built on top of either. We'll put the conflict on one page and show you where it comes from. Naming the system of record is your call, not the query's.

If the vocabulary in this section is doing more work than it explains — system of record, anniversary billing, accessorial capture, dock-to-stock — each of those is defined at length in the 3PL billing glossary.

Where this sits

  • The wider practice — warehouse systems, scanners, multi-client inventory and billing — is on the 3PL & warehouse software page
  • When the problem is data moving between systems rather than out of one, that's system integration
  • Cleanup, de-duplication, and one-off analysis live under data entry & analysis
  • Already invested in Power BI? Point it at the database — the layer underneath is the part that's missing
  • Everything else we do is listed on services

Trading-partner traffic

If the numbers you need are arriving as EDI documents, reporting on them starts with capturing them properly.

Reports nobody reads

Sometimes the answer is a fixed process, not a dashboard. Process improvement is the cheaper fix more often than anyone admits.

Changing systems soon?

A database you own is useful during a migration — old and new can be compared on the same numbers instead of on faith.

See the shape of the work

The project write-ups show what was built, what it replaced, and what it cost in effort — anonymized.

Toolkit

What we work in

PostgreSQL SQL Server SQL Python REST & JSON GraphQL OData SuiteQL ODBC Incremental loads & watermarks Scheduled jobs Row-count checks Power BI Excel & Power Query Metabase CSV & SFTP exports Read-only service accounts Field-level data dictionary Refresh monitoring & alerting Exception-based alerts Scheduled email, Teams & Slack delivery Per-customer scorecards
Questions we get

Straight answers

Does this replace our warehouse system?

No. Your warehouse management system stays exactly where it is, and your floor keeps working the way it works today. We connect to it with a read-only account and copy data out on a schedule. Nothing we build writes back into it, and nothing about your picking, packing, or billing process changes. If a vendor ever tells you the reporting layer requires replacing the system underneath it, that is a sales position, not a technical one.

Who owns the database?

You do, and that is the point of building it this way. It sits in a cloud account in your company's name, on your billing, with credentials your team holds. We are a user on it, not the landlord. You can point any tool that speaks SQL at it, hire anyone you like to work in it, and if you stop working with us the database, the queries, the refresh schedule, and the documentation all stay behind and keep running.

How current is the data?

As current as the schedule you pick. Nightly is the common answer and it is usually the right one, because most of these numbers get read in the morning and acted on during the day. Hourly is available where someone genuinely acts on the difference. We do not pretend this is real time: a report that is a few hours behind and always correct beats a live feed that quietly stops on a Friday.

Will this slow down the system our floor depends on?

It shouldn't, and that is treated as a hard requirement rather than a hope. Reads run on a schedule, off-hours where the vendor prefers it, paged and inside whatever rate limits the API publishes. After the first full load we only pull what changed, so the ongoing traffic is small. If your system has a documented limit or a maintenance window, we build around it and say so in the handover notes.

Our system already has reports. Why add anything?

Because those reports answer the questions the vendor chose to anticipate, and the report builder stops at the edge of that list. The moment your question involves a field the builder won't group by, a period it won't compare, or data from a second system entirely, you are back in Excel. The vendor sells the warehouse system. Nobody sells the layer on top of it, which is why every operator we talk to has built one by hand in a spreadsheet.

What if we change systems later?

The database stays and the extract gets rewritten. That is a real advantage of keeping your history somewhere you own: a system change does not take five years of operational data with it, and you can report across the boundary instead of starting a new spreadsheet on cutover day. It is also useful during a migration, because the old and new systems can be compared on the same numbers.

Can our own people work in it, or does everything come through you?

Your people can work in it. The whole design assumes an analyst, a controller, or a curious operations manager will connect to the database directly, and the field documentation is written for that person rather than for us. Plenty of clients take the reports and run with them. Others keep us on for new questions. Both are fine, and you are not locked into either by the way it is built.

What systems can you pull from?

Extensiv 3PL Warehouse Manager, NetSuite, Dynamics 365 Business Central, ShipHero, CartonCloud, Infoplus, and QuickBooks today, and the list is not a partnership list — it is where we have done the work. CargoWise is a different conversation, and worth saying plainly: getting data out of it is its own project with access questions to answer first, so we would scope that before promising anything. If your system is not named here, ask. What actually matters is whether it has an API or can produce a scheduled export.

Can reports go straight to our customers?

Yes, and it is one of the most useful things to automate. A scorecard can generate per customer — their receipts, their shipments, their on-time rate — and send on a schedule, scoped so each account sees only its own data. The same goes for that one export a customer insists on every week: built once, delivered automatically, in the shape they asked for. You approve the definition and the layout up front; after that nobody on your team assembles it. Customers who stop having to ask for numbers ask fewer nervous questions in general.

We don't have time to watch another dashboard.

Then don't. A report only has to be a screen when someone will actually open it. For everything else the better shape is an alert or a scheduled delivery: silence until an order goes past its ship-by date, until stock crosses the age you bill differently at, until activity is still unbilled at cutoff — and a plain email or a Teams or Slack post when it happens. The numbers watch themselves, and your attention gets spent on the exceptions instead of on confirming there aren't any.

Which report should we build first?

The one somebody rebuilds by hand most often — that is usually where the pain and the payback meet. In practice it tends to be a billing reconciliation, because comparing what the floor did against what got invoiced touches money directly, or the customer scorecard, because it retires a recurring request. We would rather ship one report people trust in the first weeks than twenty nobody has verified. The rest queue up behind it once the first one has earned its place.

How does an engagement start?

With a conversation about the reports you can't get today, not with a quote. We look at what your system exposes, what questions you're trying to answer, and whether there is a smaller version worth doing first. Sometimes the honest answer is that one report your vendor can build gets you most of the way, and we'll tell you that.

Get in touch

Which report are you rebuilding in Excel every month?

Tell us what it answers and what system it comes out of. You'll get back whether the data is reachable, what the extract looks like, and whether there's a smaller version worth doing first.

Prefer to talk?

Call 832-598-8234 or email msco@stoneagesoftware.com. Houston, Texas — serving Houston, The Woodlands, Conroe, Sugar Land, Katy, Pearland, and the Greater Houston metro.

What happens next

We read your message, an engineer replies with questions or a straight answer, and if it's worth a call we book one. No drip campaign, no handoff to sales.

No obligation — we reply within one business day. This form sends your details to Stone Age Software LLC so we can respond to you. See our privacy policy for how we handle them. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.