Malam Payroll: Modelling Payroll, Attendance and BI Together
Back to blog
automation·September 5, 2026·5 min read·By Yehonatan Saadia

Malam Payroll: Modelling Payroll, Attendance and BI Together

Malam Payroll bundles payroll, attendance and HR on a shared database. What that means for a BI model - grain, retroactive corrections, and cost versus pay.

Key takeaways

  • Malam's own site presents a unified database and the elimination of complex interfaces as the point of the suite, with named products for payroll (Malam Payroll, NeoPay, SAP Payroll), attendance (TRM, Synerion Enterprise) and HR (HR-M).
  • Its attendance pages describe collecting hours from apps, clocks, phones and an employee portal, and analysing hours by department, project, production line or any required parameter.
  • No public API specification, warehouse connector or export layout for these products could be found, so the extraction route has to be agreed with the vendor.
  • The hard part of a payroll BI is not the pipe. It is that payroll restates the past, and most BI models silently assume it does not.
  • Payroll cost and payroll pay are different measures on different dates. A dashboard that mixes them will disagree with the general ledger every month.

Malam Payroll sells payroll, attendance and HR as one suite on a shared database - the vendor names Malam Payroll, NeoPay, SAP Payroll, the TRM attendance system, Synerion Enterprise and HR-M - and markets that as a single source of truth. Reporting across the suite is straightforward. Reporting outside it is a modelling problem, not a connectivity one.

Three layers, three different grains

The suite covers three layers, and the reason a naive dashboard misleads is that each layer stores time at a different resolution.

LayerNamed productsNatural grainThe trap
AttendanceTRM, Synerion EnterprisePunch or shift, per employee per dayProvisional until the period is approved; edits continue after the fact
PayrollMalam Payroll, NeoPay, SAP PayrollComponent amount, per employee per periodCarries retro rows that belong to earlier periods
HRHR-MEmployee state, valid from a dateOverwritten in place unless history is kept explicitly

Aggregating those three at their own grain and joining on employee and month gives correct answers. Joining raw punches to payslip components does not, because a punch has no money on it and a component has no day on it.

What question are you actually asking?

Almost every payroll dashboard request is one of four questions, and they need different measures:

  • What did people cost us? Employer cost by month by cost centre - gross plus employer contributions and provisions, on the period the work belongs to.
  • What did we pay out? Net transfers plus withholdings, on the date money moved. This is the one that ties to the bank.
  • How many people do we have? Headcount or full-time equivalent at a point in time, which is an HR measure, not a payroll one.
  • What did an hour cost on this project? Attendance hours joined to a cost rate, which is a derived number and needs a stated rule.

Mixing the first two in one chart is the single most common cause of a finance team refusing to trust a payroll dashboard. Decide which of the four each tile answers, label it on the tile, and keep the definitions in one document. The general version of that discipline is in connecting CRM and ERP data to BI.

Why do payroll numbers change after the month closes?

Because payroll legitimately restates the past. A retroactive pay-scale change, a late absence certificate, a correction to a previous month's hours or a backdated promotion all produce amounts in the current run that belong to an earlier month.

That behaviour has three consequences for the model, and all three are structural rather than cosmetic:

  • A snapshot loaded once per month and never revisited will drift away from payroll's own numbers over the year.
  • An append-only fact table is wrong unless every row carries both the payment period and the period the amount belongs to. Two date columns, not one.
  • Any comparison to last year must state which version of last year it uses - as originally reported, or as it stands now.

The practical rule is to reload a rolling window - typically the current period plus several closed ones - on every run, and to store the run identifier on every row so a restatement is visible instead of mysterious.

A minimal model that survives contact with reality

Four tables carry almost everything and none of them require an API:

  • Employee dimension, one row per employee per validity window, keyed by employing entity plus payroll employee number, with ת"ז held only if a downstream process genuinely requires it.
  • Organisation dimension, cost centre and department with their own validity windows, because departments are renamed and merged and last year's report has to keep last year's structure.
  • Payroll fact, one row per employee per component per period, with both the payment period and the earning period, plus the run identifier.
  • Attendance fact, one row per employee per day per activity, with an approval status so provisional and approved data are distinguishable.

Two operational rules make the difference between a model that lasts and one that is rebuilt every year: never delete and re-insert a period silently, and never let a report read attendance rows that have not been approved without saying so on the report.

Where incentive pay and project hours complicate it

Malam publishes an incentive-pay module described as a monthly process in which departmental activity data is reported and combined with employees' attendance data to calculate a personal incentive premium. That is a useful example of a general pattern, because it means a number on the payslip is derived from a source outside both payroll and attendance.

Whenever that happens, three things need an owner:

  • The input data itself - who produces the departmental activity figures and by when.
  • The calculation rule, which is a business policy and changes without any system change.
  • The audit trail, so an employee question a year later can be answered from stored inputs rather than from someone's memory of a spreadsheet.

Project-hour costing has the same shape. Attendance can carry a project code, but the rate applied to it is a decision, and a BI layer that invents the rate quietly becomes the system of record for something nobody agreed to.

What Malam publishes, and what you have to ask for

Malam's public pages are product pages. They describe capabilities, named systems and the unified-database architecture. They do not publish an API reference, an export record layout, a database schema or a warehouse connector, and none could be found elsewhere.

So the extraction conversation is the same one you would have with any Israeli payroll vendor:

  • Ask which of the four routes is on offer - a scheduled report, a file drop, a vendor-built interface, or reporting inside the vendor's own tool.
  • Ask for the layout as a versioned document.
  • Ask specifically how retro rows are represented, because that answer determines your fact table.
  • Ask who may receive the file, since it carries salary and identity data and the recipient list is part of the design, not an afterthought.

It is worth noting the contrast with one payroll output whose structure is public: employer reporting of pension deposits runs on the Capital Market Authority's uniform structure, an XML-based format defined in published circulars. A regulator-defined interface is documented; a vendor-defined one usually is not. The equivalent vendor-side conversation for an integrated bureau is described in getting payroll and attendance data out of Hilan.

Sources

#Malam Payroll#NeoPay#TRM#BI#payroll analytics#מלם

Frequently asked questions

Does Malam Payroll expose an API?

No public API specification, developer portal or export layout for Malam Payroll, NeoPay or TRM could be found. The published material is product-level. Request an interface definition in writing from the vendor, including how retroactive corrections are represented, before committing to a design.

Should attendance data go into BI before it is approved?

Only if the report says so. Unapproved attendance is provisional by definition and will change, so a dashboard built on it shows managers numbers that later move. The usual pattern is to load both and let the report choose, with the status visible.

Why does my payroll dashboard disagree with the ledger?

Usually because it mixes cost with cash. Employer cost belongs to the period worked and includes contributions and provisions; the payment belongs to the date money left the account and excludes provisions. Both are correct, and they are not the same number.

Can attendance hours be used for project costing?

Yes, if attendance captures a project code at entry and a costing rate is defined by policy rather than derived in the report. Without an agreed rate rule, the BI layer quietly becomes the authority for a number that finance never approved.

Keep reading

Related service

Dashboards

One screen with the few numbers that actually change a decision.

Learn more →←

About the author

Yehonatan Saadia

Freelance automation, web & MVP developer

I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.