SAF-T Ready, EHF Through Altinn

Full-Stack Web Development Agency Norway

React/Next.js and Node.js applications for Norwegian businesses that have outgrown WordPress or Shopify, with a SAF-T-ready accounting layer, EHF invoicing through Altinn, and Vipps checkout built in from the first architecture conversation.

skilleddesk.com/analytics
Search Impressions
19,409
+45% QoQ
Revenue trend, last 8 weeks
Web designFull-stack web developmentSocial media marketingGoogle PPC campaignDropshipping websiteEmail marketing & automationConversion tracking setupGraphic designWeb designFull-stack web developmentSocial media marketingGoogle PPC campaignDropshipping websiteEmail marketing & automationConversion tracking setupGraphic design

What A Full-Stack Build Actually Has To Handle For A Norwegian Business

A Norwegian business usually hits the same wall in three places at once. SkilledDesk works as a full-stack web development agency for Norway, where local rates change the build-versus-buy maths more than elsewhere. A billing tool with no path to a SAF-T Financial export. An invoicing setup that has never heard of EHF or Altinn. And a checkout with no Vipps option, in a market where most customers already have it installed. These rarely turn out to be three unrelated problems. They are the same root cause surfacing on three different screens: a data model nobody designed as one system.

Closing all three at once means starting from a single bespoke React and Node.js build, with one database built around every requirement from day one rather than treating each screen as its own project, which is the same underlying architecture SkilledDesk already runs for clients in 13 other countries. As a full-stack web development company working with the Norwegian market, we design that database around Skatteetaten's SAF-T requirement and Altinn's EHF invoicing standard from the first architecture conversation. Vipps goes in alongside card payment, rather than arriving later once conversion data flags the gap. When a bug report lands after Norwegian hours, how serious it is decides how fast it gets answered. Not what the clock reads on either end.

One Build Standard, Whether The Client Sits In Oslo Or Anywhere Else

130+
Brands Served
14+
Countries Reached
2019
Founded, Serving Clients Worldwide
1:1
Direct Founder Access
FAQ

What Norwegian Businesses Actually Ask Before Hiring A Full-Stack Development Team

Norway is not an EU member, but the GDPR reaches it anyway through the EEA agreement. Domestically it runs under the Personopplysningsloven, overseen by Datatilsynet, rather than a separate regime in parallel. What layers on top, and what no other full-stack country page here has had to raise, is the Bokføringsloven's SAF-T Financial requirement. A bookkeeping-obligated business has to be able to hand Skatteetaten a SAF-T export on request, not just a nicely formatted invoice PDF. Both go into the data model from the first architecture conversation, not after a request lands.
It has to, the moment a public-sector body or a larger enterprise client comes into scope. Norway's standard invoicing format is EHF, built on the Peppol network and delivered through Altinn. A generic PDF attached to an email either bounces back or gets re-keyed by hand on the client's side. EHF delivery goes into the billing architecture from the start, rather than bolted on the first time a public-sector buyer asks for one. The cost of leaving it out is rarely the integration itself. It is the tender you cannot answer, or the enterprise account that quietly routes its purchase orders somewhere else because your invoices create work on their end. Neither shows up as a line item anywhere, which is precisely why it gets skipped.
Yes, by default rather than as a later add-on. Vipps is the payment and identification app most of Norway's population already carries. A checkout or login screen with no path through it reads as an obvious gap to a Norwegian customer, not a deliberate design choice. We scope it alongside card payment from the first architecture conversation, not after launch once drop-off data shows people abandoning at checkout.
A Norway quote really splits into two scenarios. An application that only ever needs to email a PDF invoice. And one that also has to deliver EHF through Altinn for a public-sector or larger enterprise buyer. Pricing both as if they were the same build means either overcharging the first case or under-scoping the second. Which scenario applies, plus how many user roles and other integrations sit on top, gets sized on the discovery call. It comes back as one itemised NOK quote with the 25% MVA already included, not a starting-from figure. A build with us opens at $1,199, quoted in kroner, which is worth weighing against what the same work costs at local Norwegian day rates.
React or Next.js on the front end, Node.js on the back end, and a Postgres database sized to whatever the application has to track. SAF-T export logic and EHF invoice generation sit inside that same data layer rather than bolted on afterward as a separate service. The same stack already runs applications for clients in 13 other countries. Keeping the government-facing formats inside the data layer matters more than it sounds. A bolted-on exporter has to read the ledger a second time and make its own assumptions about what a line item means, and that is exactly where a SAF-T file starts disagreeing with the accounts it was generated from.
What drives this number for a Norway build is how many separate government-facing formats the application has to produce. Not the feature list on its own. A tool that only needs a standard PDF invoice ships fastest. Add a SAF-T Financial export for Skatteetaten and an EHF invoice path through Altinn, and each one is a genuinely separate format to design, generate and test. We map that format count on the discovery call before committing to a delivery date.
A critical bug and a routine feature request do not call for the same response speed. Treating them identically ends up either too slow for the emergency or needlessly rushed for the routine ask. SkilledDesk splits the two. A critical issue gets an acknowledgement within a few hours whatever time it lands in Norway. A routine request folds into the next scheduled call rather than chasing an artificial same-day deadline. That tiering sits in the engagement itself, the same structure already running for clients in 13 other countries. A request's actual urgency decides the response time, not which hours happen to overlap that week.
Ask a local freelancer or small studio how payment is structured, and plenty want 50 to 100% up front with no milestone tied to actual delivery. That leaves the client exposed if the build stalls or the freelancer moves on to another contract. SkilledDesk ties payment to delivered milestones instead, priced as one itemised NOK quote with 25% MVA included. The founder runs the project directly from architecture through handoff, and real client applications sit open on the portfolio to check first. Everything goes in writing before the build starts, in Norwegian kroner, with the scope fixed.
The Problem

Where A Template Quietly Falls Short In Norway

An Accounting Setup That Can't Produce A SAF-T File On Request

Under the Bokføringsloven, a bookkeeping-obligated Norwegian business has to be able to hand Skatteetaten a SAF-T Financial export the moment it's requested — not eventually, on request. A billing tool that only ever produces a PDF invoice has no path to that export at all, which means someone reconstructs the ledger by hand from spreadsheets the day an audit request actually lands.

Invoicing That Bounces The Moment A Public-Sector Client Is Involved

Norway's public sector, and a growing share of larger private buyers, expects invoices delivered in EHF format through the Altinn network, not a PDF attached to an email. A generic invoicing plugin that has never heard of EHF means the invoice either gets rejected outright or gets re-keyed by hand on the client's side — the exact manual step a billing system was supposed to remove.

A Checkout Or Login With No Vipps Option

Vipps is the payment and identification app most of Norway's population already has installed, and a checkout or login screen with no path through it doesn't read as a minor omission to a Norwegian customer — it reads as a template built for a different market with the logo swapped.

Outside The EU, Same Standard

Sitting outside the EU while inside the EEA earns Norway no scaled-down version of this work. The builds sit on the portfolio, alongside the sites and ad accounts.
See Our Full Portfolio

Where A Page Builder Or Template Runs Out Of Runway

Most Norwegian businesses never need a custom build for the brochure-site stage. A page builder or a WordPress theme covers that fine, same as anywhere else. What changes the calculation is a specific moment. The first public-sector RFP that requires EHF delivery through Altinn. Or the first time Skatteetaten asks for a SAF-T export and the honest answer is give us a week to rebuild the ledger by hand. A plugin bought to cover that one moment keeps charging its own subscription for as long as the site runs, and none of that spend ever turns into something the business owns. Owning the codebase outright changes the math. One written scope agreed up front. A single itemised NOK quote with 25% MVA included. And each later requirement, a second invoicing path or a new payment method, built directly into a system the client keeps rather than rented piece by piece from someone else's plugin marketplace. The founder handles the scoping, the build and the handoff on each Norway engagement personally.

Ready For One Itemised NOK Quote Instead Of Three Plugin Subscriptions?

Send the spec and we'll be straight about what is worth building versus buying at Norwegian rates.

Get Free Consultation