Scoping note / Malaysia / September 2026

Online Tenancy & Stamping Platform

What the client is actually asking for, what it costs to build properly, and the four things that need answering before any number gets committed.

Reference tenancy.my Stack WordPress Audience property agents, B2B Client timeline 1 month from design approval Realistic 6 to 8 weeks Middleman 10% of contract value

What it is

A payment funnel bolted to a manual government process

Strip away the marketing pages and this is an order intake system for a small legal services outfit. Property agents come to the site with a tenancy agreement that needs stamping, fill in a form, upload documents, and pay. Staff then do the actual work by hand in the back office.

The reference site makes the business model very legible. Drafting a tenancy agreement costs RM50 (advertised as reduced from RM80). Stamping carries a flat RM15 service fee on top of the government duty. Those are volume prices. The client is not selling a premium service, they are selling throughput.

That matters for how you scope it. The public pages are a shopfront and barely earn their keep. The thing that determines whether this business works is how fast one staff member can move fifty applications through the back office in a morning. The admin portal is the product. Everything else is packaging.

It is not consumer facing, and the forms prove it

Read the fields on the reference site's two forms. Every identity field is Agent Name, Agent Email, Agent Contact. There is no field anywhere for the landlord or the tenant. The people paying are property agents processing tenancies on behalf of their clients, not members of the public stamping their own rental agreement.

That single fact reorders most of the priorities:

Which means SEO is close to irrelevant

Do not sell SEO into this and do not let it be expected for free. There is no ranking value in a service a repeat B2B user reaches by bookmark. Technical hygiene only: clean markup, correct metadata, fast pages, an XML sitemap, HTTPS. That is included as competence, not as a service line.

There is exactly one exception worth raising later. A free public stamp duty calculator, correct and dated, is a genuine search asset. Agents and landlords do search for that. It is the one page on this site that could pull traffic, and it doubles as the proof that the client's numbers are right when the incumbent's are not. Park it as a phase two idea rather than folding it into this quote.

The shape of the system

Three surfaces, not one website: a public intake form that takes money, a private back office that processes work, and a status page so agents stop calling to ask where their document is.

How to position the quote

Never present this as "a 10 page website". Priced that way it gets benchmarked against a RM5,000 brochure site and the admin portal looks like a free extra. Present it as an operations system with a public intake form attached, and the comparison shifts to software, which is the correct comparison.

The constraint that sets the price

Stamping cannot be automated, and this needs saying out loud

There is no public API from LHDN that lets a third party submit stamping applications programmatically. Since 1 January 2026 stamp duty runs on the Self Assessment Stamp Duty System, accessed through MyTax under e-Duti Setem. Submission requires a Tax Identification Number, a login, an uploaded instrument and a declaration return (BNDS) filed by a human.

So the platform collects the job and the money. A member of staff still logs into MyTax and stamps the document manually, then uploads the stamped certificate back into the portal. Nothing in the brief says otherwise, but nothing in the brief rules it out either, and that gap is exactly where a fixed price project goes wrong in week five.

Confirm before quoting

Ask the client directly: does the platform submit to LHDN automatically, or does your staff stamp manually and upload the result? If they expect automatic submission, the project as specified does not exist and the conversation has to restart.

There is a second consequence. Under self assessment, the person filing carries the liability for getting the duty right. If the site's calculator understates the duty, the client's operation eats the shortfall and the penalty. That turns a small piece of arithmetic into the highest risk component in the build, and it needs treating accordingly: server side calculation, an admin override before anything is charged, a stored snapshot of the rates used at the time of quoting, and a written sign off from the client's own tax agent on the formula.

Reference site audit

Do not copy tenancy.my. Its calculator is partly running expired law.

The Finance Act 2024 replaced the tenancy duty scale from 1 January 2025. The RM2,400 annual rent exemption was removed, the rates for longer tenancies went up, and a fourth duration band was added. Reading the reference site's own JavaScript, it has not fully caught up.

Expired Still shipping on their pages

factor = 1 | 2 | 4 duty = ceil(((rent * 12) - 2400) / 250) * factor

Their do_calculate() function applies the pre-2025 scale and still deducts the abolished RM2,400 exemption. On a RM1,500 tenancy it understates the duty.

Current The law since 1 Jan 2025

factor = 1 | 3 | 5 | 7 duty = max(10, ceil((rent * 12) / 250) * factor)

Full annual rent, no deduction, RM10 minimum principal duty, and four duration bands rather than three.

Their stamping form is in better shape and uses the 1 / 3 / 5 factors with no exemption, but it still carries real defects worth knowing about:

This is the strongest thing you have to say in the pitch. You are not offering to rebuild their competitor's site, you are offering to build the version that computes duty correctly under a self assessment regime where errors are the filer's problem.

Build specification

The calculator, written out properly

This is the whole business rule. It goes in an admin editable settings screen, not hardcoded, because this schedule has already changed once in the last two years and will change again.

annual_rent = monthly_rent × 12 blocks = ceil(annual_rent / 250) principal = max(10, blocks × band_rate) duplicates = 10 × additional_copies penalty = late? max(flat, pct × principal) : 0 total_payable = principal + duplicates + penalty + service_fee
Tenancy durationRate per RM250 or partPre-2025
Not exceeding 1 yearRM1RM1
More than 1 year, not exceeding 3RM3RM2
More than 3 years, not exceeding 5RM5RM4
More than 5 years or indefiniteRM7RM4
Late stampingPenalty
Within 3 months after the 30 day deadlineHigher of RM50 or 10% of deficient duty
More than 3 months after the deadlineHigher of RM100 or 20% of deficient duty

Worked example for the spec, so there is an agreed test case: RM1,500 per month over two years is RM18,000 annual rent, 72 blocks, RM216 principal duty. Add RM10 for one duplicate copy. If stamped four months late, add RM100 (the flat amount beats 20% of RM216 at RM43.20). Plus the service fee.

Contract language

Put the duty schedule in the functional spec as a client supplied input, signed off by their tax agent, and price rate changes after go live as a maintenance item. You do not want to be the party who guaranteed a tax computation.

Scope

What the ten pages and two forms actually contain

Public site, 10 pages

Home, Create (service chooser), Draft Tenancy application, Stamping Only application, Track, Contact, Refund Policy, Privacy Policy, Terms, User Manual. Built from the supplied Figma. Worth noting in the quote that the two application forms are counted inside the ten but are an order of magnitude more work than a policy page, so page count is a poor unit here and should not be used to argue for extras later.

Draft Tenancy form

Booking form upload, special remarks, agent name, email and contact, fixed fee, payment. Simple by design because a human writes the agreement afterwards.

Stamping Only form

Rent, tenure, duplicate copies, agreement date, tenancy start date, live fee calculation, then uploads for the agreement itself plus passport (foreign parties) and business owner NRIC (sole proprietor or partnership), agent details, payment. File size ceiling, type whitelist, virus scan on upload.

Admin portal

Application queue with filters by status, service type, date and agent. Detail view with all submitted data and documents. Status transitions with an audit trail. Secure document download and upload of the stamped result. Payment status and reconciliation against the gateway. Duty override before charging. Rate settings screen. CSV export. Staff accounts with roles.

Notifications

Transactional email to the agent on submission, payment received, in progress, completed and rejected. Internal alert to staff on new paid application. Reference number issued at submission and used on the public tracking page.

Workflow

The application lifecycle, which the spec must define before you build

This is the part that is genuinely missing from the brief. Every status below needs an owner, a trigger and a failure path, and getting it agreed in writing is what keeps a one month build to one month.

  1. Submitted, awaiting payment

    Form validated server side, duty recalculated on the server, reference number issued, files quarantined until payment clears.

    Owner: system
  2. Paid

    Gateway callback verified and recorded. Needs idempotency so a repeated callback does not double count, and a reconciliation view for payments that succeed at the bank but fail to return to the site.

    Owner: system
  3. Under review

    Staff open the documents and check them. Two exits that the brief does not currently cover: documents are wrong and need resubmission, or the declared rent does not match the agreement and the duty was underquoted.

    Owner: staff
  4. Top up requested

    A second payment link for the shortfall. Decide now whether this exists. If it does not, someone chases it on WhatsApp forever and the portal is not the system of record.

    Owner: staff, needs client decision
  5. Submitted to LHDN

    Staff file it manually on MyTax and record the submission reference back in the portal.

    Owner: staff, outside the system
  6. Completed

    Stamped certificate uploaded and released to the agent via a signed, expiring download link. Notification sent.

    Owner: staff
  7. Rejected or refunded

    Refund policy exists on the reference site, so refunds are in scope commercially. Confirm whether they are processed inside the portal through the gateway API or manually at the bank.

    Owner: staff, needs client decision

Pricing

What to charge

Honest effort for the scope as written, working solo with the design and spec supplied, is around 34 working days. That is roughly seven weeks, against a requested four. The pricing below is built from that, not from page count.

Every figure is grossed up so that the 10% middleman cut comes out of the quoted price, not out of your margin. Quote the right hand column. Never quote the net column, and never work backwards from it in front of the client.

OptionWhat changesYou netQuote
A. Core Full public site, both forms, server side calculator, payment gateway, tracking page, notifications. Back office built on native WordPress admin screens with custom columns, filters and status handling. One round of UAT, 30 day defect warranty. RM16,650 RM18,500
B. Full Everything in Core, plus purpose built admin screens with a work queue and dashboard, full status pipeline with audit trail, secure document vault with expiring links, duty override and top up flow, refund handling, gateway reconciliation report, admin editable rate table, CSV export, staging environment, two rounds of UAT, staff training session with a written SOP, 60 day defect warranty. RM23,850 RM26,500
B+ Agent accounts Option B plus agent login, saved profiles that prefill every submission, and submission history. Given this is repeat B2B use, this is the highest value item in the whole scope. RM26,550 RM29,500
C. Platform Everything in B+, plus auto drafted tenancy agreement PDF generated from form data, e-signature, English / Bahasa Malaysia / Chinese, WhatsApp notifications. RM34,200 from RM38,000
Walk away floor, net to you RM18,000RM20,000

Option B is the one that matches what they described and the one to quote. Option A exists so that if the budget comes back tight you have something to concede to instead of discounting B. Option C is there to make B look measured, and because "Instant Tenancy" on the reference site has been down for maintenance, which suggests auto generation is the hard part nobody has nailed.

RM26,500

Quote this. Nets RM23,850 after the middleman. Floor of RM20,000 quoted, RM18,000 net. Below that the admin portal comes out of scope and you say so rather than absorb it.

Pin the 10% down before quoting

Three things need confirming, because each one quietly changes what you take home. Is the 10% taken off the contract value, or added by the middleman on top of your number? Does it apply to the monthly maintenance too, or to the build only? And is it calculated before or after tax?

Also confirm whether you are quoting inclusive or exclusive of service tax. If SST applies to you, quoting a tax inclusive number by accident hands over another slice on top of the 10%.

Terms to attach

The recurring revenue is in the rate table

The duty schedule changed in January 2025 and the filing system changed in January 2026. Build the rates as configuration, then sell the maintenance plan on the basis that you keep them correct. That is a far easier sell than generic hosting support.

Timeline

Six weeks, and the clock starts later than they think

One month is achievable only if every dependency lands on day one and the scope is frozen. It will not be, so quote six weeks and protect yourself on when week one begins.

  1. Week 1 · Foundation

    Theme scaffold from Figma, design tokens, component library, page templates, hosting and staging set up.

  2. Week 2 · Pages

    All ten pages built and responsive. Content loaded. Client review checkpoint on the front end while back end work begins.

  3. Week 3 · Forms and calculator

    Both application forms, file upload handling, server side duty calculation with the agreed test cases, validation.

  4. Week 4 · Payment and data

    Gateway integration, callback verification, idempotency, reference numbers, tracking page, application data model.

  5. Week 5 · Admin portal

    Work queue, detail views, status pipeline, document vault, overrides, exports, roles, notifications.

  6. Week 6 · Hardening and handover

    Security review, PDPA controls, end to end testing, UAT and fixes, staff training, documentation, go live.

Write this into the contract

Week one starts when all five of these are in hand: final Figma covering every page and every form state, the signed functional spec including the status workflow, payment gateway credentials on a live merchant account, hosting access, and all page content. Merchant account approval in Malaysia routinely takes two to four weeks on its own and is entirely outside your control.

Risk register

What actually goes wrong on this build

RiskEffectControl
Client expects automatic LHDN submissionProject as specified is not buildableConfirm in writing before quoting
Duty calculated wrong under self assessmentClient absorbs shortfall and penalty, blames the buildClient's tax agent signs off the formula, admin override, rates stored per application
Admin workflow undefined in the specScope creep through weeks 4 and 5Status pipeline agreed and signed before build starts
Merchant account not approved in timeCannot test or launchExcluded from your timeline, flagged as a client dependency on day one
MyKad and passport copies held on the serverPDPA exposureStorage outside webroot, expiring signed links, role based access, retention policy, privacy notice
Figma arrives incomplete on form statesYou design by default and get corrected laterError, empty, loading and success states required before week one
Payment succeeds but callback failsPaid applications invisible to staffIdempotent callbacks plus a reconciliation screen

Before you send a number

Questions for the middleman

The first four change the price. Get those answered before committing to anything.

  1. Does the platform submit to LHDN automatically, or do staff stamp manually on MyTax and upload the certificate back?

    Blocking

    There is no third party API. If they expect automation, the whole project needs rethinking.

  2. Who signs off the duty calculation formula, and who carries the liability if it is wrong?

    Blocking

    Self assessment puts the risk on the filer. This needs to be their tax agent, in writing, not your best reading of the Stamp Act.

  3. Which payment gateway, and is the merchant account already approved and live?

    Schedule

    The gateway choice moves the price by two or three days, not by tiers. The approval timeline is the part that can sink the launch date, and it is entirely outside your control. Whatever they pick must support FPX, because Malaysian agents pay by bank transfer, not card.

  4. Does their gateway have a refund API, or are refunds done manually at the bank?

    Scope

    The simpler local gateways often have no refund API at all. Since there is a published refund policy, this decides whether "process refunds in the portal" is even buildable or has to become a manual step with a record kept.

  5. Can we see the functional spec and the Figma before quoting?

    Blocking

    The admin portal is most of the work and none of it is described yet. Quoting blind on that is how this goes wrong.

  6. What are the application statuses, and what happens when documents are wrong or the duty was underquoted?

    Scope

    Needs a top up payment flow and a resubmission path, or staff end up working outside the system.

  7. Are refunds processed inside the portal or manually at the bank?

    Scope

    Gateway refund API integration is a real line item.

  8. Do agents need accounts, or is every submission anonymous with a reference number?

    Scope

    Accounts add authentication, profiles, history and password recovery.

  9. English only, or Bahasa Malaysia and Chinese as well?

    Scope

    The reference site is bilingual throughout. If they expect the same, that is not a free addition.

  10. Expected volume in year one, and how many staff work the back office?

    Design

    Fifty applications a month and five hundred are different admin designs.

  11. Who supplies the page content and the policy text?

    Dependency

    Missing copy stalls week two.

To send

Message to the middleman

Positions you as the person who read the brief properly, without giving away the analysis for free.

Hi, I have gone through the brief and the tenancy.my reference. It is a well defined project and it is one we can build. Before I put a firm number on it, there are four things I need confirmed, because each one moves the price.

1. Stamping submission. LHDN does not offer a public API for third party submission, and since January 2026 stamping runs through the Self Assessment system on MyTax. So the platform can take the application and the payment, but a staff member still files it manually and uploads the stamped certificate back. Can you confirm the client understands it works this way? If they are expecting automatic submission to LHDN, we need a different conversation.

2. The fee calculator. Worth flagging early: the duty schedule changed on 1 January 2025. The RM2,400 exemption was removed, the rates went up, and a fourth duration band was added. The reference site has not fully updated, one of its calculators still runs the old formula. We will build to the current schedule, but under self assessment the filer carries the liability for getting it right, so we need the client's tax agent to sign off the formula in writing and we will build an admin override before anything is charged.

3. Payment gateway. Which one, and is the merchant account already approved? We can work with any of the common Malaysian gateways, so the choice itself is not a problem, but it needs to support FPX and we need to know whether it offers a refund API, since there is a refund policy to honour. The approval timeline is the real issue. It often takes two to four weeks and it sits on the critical path.

4. The functional spec and Figma. Can I see both before quoting? The admin side is the bulk of the work here and the brief covers it in one line. In particular we need the application statuses defined: what happens when uploaded documents are wrong, and what happens when the actual duty comes out higher than what was quoted and charged.

One observation on the shape of it. Looking at the reference site, every identity field on both forms is the agent, not the landlord or tenant. So this is a tool for repeat professional users rather than a consumer site. That is worth confirming, because if it is right then the back office and the speed of resubmission matter far more than the marketing pages, and agent logins with saved details become one of the more valuable things we could build.

On budget and timing. As a guide, a build of this shape sits in the RM18,500 to RM26,500 range, depending on how much of the back office is purpose built versus running on standard admin screens. On timing, four weeks from design approval is achievable only if the final Figma, the signed spec, the live gateway credentials and the hosting are all in place on day one and the scope is frozen. Realistically I would plan for six weeks and treat four as the stretch.

Happy to jump on a call with the client directly if that is easier, particularly on point one.