Employment-agency software: ATS, temporary-worker records, hours, GDPR
You are not buying an ATS from the valley. You are buying one card for the candidate and the temporary worker that will survive a labour inspection and a GDPR access request. Employment-agency software instead of Excel, Telegram and three unconnected SaaS tools.
You are not buying an ATS from the valley. You are buying one card for the candidate and the temporary worker that will survive a PIP inspection and a GDPR access request. If that card currently lives in a spreadsheet called “roster_final_v7_COPY”, in a Telegram group “shift B hall 3”, and in the owner’s inbox with four hundred CVs from last year, you do not have a system. You have a collection of accidents that have not yet happened in the same week.
A temporary-work agency does not start a typical Monday with a recruitment funnel from a webinar. Monday looks like this: the user undertaking calls because the second shift is six people short; the coordinator searches a chat to see who is even “on the books”; payroll asks whether the contract and the assignment to that hall were ever issued; someone at the plant sends a photo of a paper attendance list; and from the other side a candidate email: “I want to know what data you hold, and I want it erased.” That is not a “pretty HR CRM” problem. That is a single-truth-about-a-person problem that a spreadsheet cannot defend.
GESOFT — Paweł Matusiak, Laravel, Vue, Android — builds employment-agency software when temporary work, placement and foreign nationals have to be one process, not three subscriptions. When you need a user-undertaking portal, Android for the shift coordinator, unusual rates and piecework, and integration with finance and the plant’s time clock. When eRecruiter, Traffit, HRlink or a payroll suite is enough — buy those. Really. This article is not here to burn a working ATS. It is here so you do not buy the valley when an inspector asks for an assignment letter and GDPR asks about CV retention.
We write for the owner and the operations director, not for an “employer branding” team. We do not promise that an app will replace the National Register of Employment Agencies (KRAZ), a PIP inspector or the social-security payer. We do not invent penalty rates — the fine is in the act; you check the current consolidated text. We promise something smaller and more expensive in its absence: a card that shows who the person was as a candidate, who they are as a temporary worker, which assignment they stand on, which hours and which rate apply, which residence documents expire, and when the data must disappear.
A PIP inspection and a GDPR request versus Excel and a Telegram group
An inspection does not arrive for “digital transformation”. It arrives for specifics. Show the contract with the temporary worker. Show the arrangements with the user undertaking. Show the assignment to this line, these hours, these conditions. Show that the person knew where they were going and for how much. Show working-time records that match what the plant confirmed, not what the coordinator “sort of totalled on Saturday”. If all of that has to be glued from mail, PDFs and photos of paper, the inspection lasts longer and you burn people on finding paper instead of staffing the shift.
A GDPR request is a different stress that burns the same hole. A candidate who did not get the job has the right to ask what you hold and on what basis. They may request access, rectification, restriction, sometimes erasure. If CVs sit “forever in the owner’s mail”, in a Dropbox folder “recruitment 2023–2025” and in a spreadsheet of PESEL numbers “because it is easier to filter”, you will not answer on time, because you do not know where the truth is. GDPR in web applications describes how we design retention and roles. Here we add the agency twist: the same person is a candidate, a temporary worker, a person after the assignment ends, and a candidate again. One card. Many states. No “leave it, they might come back in two years” without a basis and a date.
Telegram and WhatsApp are fast. That is why they die in a dispute. The thread “who came on nights” is buried under a meme. A photo of an attendance list has no audit of who changed it. A candidate’s number in the coordinator’s private phone is a leak waiting for a stolen handset or a staff resignation. Employment-agency software does not need to be prettier than chat. It needs assignment letters, hours and contact consent to be findable by name and by the plant’s tax id, not by the duty officer’s memory.
- A spreadsheet with several “sources of truth”: recruitment, staffing, hours, rates, foreign nationals — none is the source, all are copies.
- A Telegram group as working-time records: fast until 23:00, indefensible at 09:00 in front of PIP.
- The owner’s inbox as a CV archive: convenient until an erasure request or a mailbox theft.
- A paper assignment in a file, a scan in mail, another version at the client — three documents, one rate dispute.
- The plant RCP as a PDF, agency hours in a sheet, payroll in HR: a triangle that never returns to zero without a manual night.
- A shift coordinator with a notebook: when they are ill, you have no roster, you have archaeology.
Count it without a slide. One inspection that eats two full-time people for two weeks costs more than a year of a decent ATS subscription, if an ATS is enough. One GDPR request you answer late or incompletely costs nerves, a law firm and — if the DPA takes interest — a proceeding that an “HR CRM upgrade” will not settle. One hours error on a large roster is either underpayment (a dispute, PIP, trust) or overpayment (your margin). The system should cut those three fires. The colour of the kanban can wait.
The new act from 1 June 2025 and KRAZ — platforms too
From 1 June 2025 the Act of 20 March 2025 on the labour market and employment services (Journal of Laws 2025 item 620) applies. It replaced the act on employment promotion and labour-market institutions. The instrument: PDF on ISAP, ELI identifier. This is not a “marketing amendment”. It is a new framework labour-market statute. Employment-agency software does not replace reading it. It must not lie about who you are in the register and which services you actually provide.
The register of employment agencies sits in Title IX Chapter 1 of the act. The public search is KRAZ on stor.praca.gov.pl. KRAZ is the state register, not a CRM tab. Entry in the register and changes are not “a CRM module”. They are a duty toward the state. Applications for entry are filed electronically only — via STOR/KRAZ to a voivodeship labour office or a marshal’s office; the marshal of the voivodeship enters you in the register (biznes.gov.pl ou102). A GESOFT app does not submit the application for you and does not impersonate a clerk. It can hold your copy of the entry: number, scope of services, dates, powers of attorney, correspondence. That is the agency’s dossier, not the state register.
Article 305: who is an agency and who is a job board
On the Gofin discussion of Article 305, employment agencies are entities entered in the register that provide: job placement, personnel consulting, career/work counselling, and temporary work. From 1 June 2025 collecting and making available information on job offers is also subject to entry — platforms that used to live in the grey zone of “we are only a notice board”. If you run a jobs portal, a footer line “we are not an agency” is not enough. You check whether your activity now falls within the entry. The system can label a product “job board”, but it will not exempt you from the act.
That has a concrete data-model effect. You must not collapse four services into one funnel “candidate → permanent job”. A person you search for a client’s headcount (placement) is a different legal relationship from a temporary worker whom you employ and assign. Personnel consulting is a project for a corporate client, often without the agency employing anyone. Career counselling is another service and another file. KRAZ knows what you are registered for. Your employment-agency software must know the same before you issue an invoice or a contract your entry does not cover.
- Placement: you match a candidate with an employer; the employment (or civil-law) relationship arises at the client, not with you.
- Personnel consulting: a project, assessment, outplacement, a report for the commissioning party — a different contract, different retention.
- Career / work counselling: a service to a person or an institution, not “fast sourcing for the hall”.
- Temporary work: you are the employer of the temporary worker; the plant is the user undertaking.
- Job board / platform: from 1 June 2025 it may require an entry — do not pretend it is “just jobs SaaS”.
- KRAZ dossier: entry number, scope, dates, decision scans, persons authorised to represent — on the company card, not in a drawer.
The change of statute does not order you to buy a particular software brand. It orders you to know who you are. An agency that writes “full-stack HR” on the website and has only placement in KRAZ will not fix that with an ATS button. First the entry and the contracts. Then a system that does not mix those contracts. If you are only entering the market, the order is the reverse of a sales slide: electronic filing in STOR/KRAZ to the competent marshal, scope of services, insurance and process — and only then screens.
How many agencies there are in Poland: the PFHR report, not GUS, and not “all persons in employment”
The most common error in a conversation between an owner and a vendor: “there are X agencies in Poland, so our case is typical”. X depends on the source. The Polish HR Forum in the report “The HR services market 2025” — PulsHR coverage of 2 March 2026 said that at the end of 2025 there were 8,286 agencies (down 3% year on year). During the year: 1,493 new entries and 1,756 deletions. In total — so the report — more than 1 million people found work through agencies. We cite this as an industry report by PFHR in press coverage, not as a GUS table and not as a number we ourselves counted in KRAZ.
8,286 is a picture of the HR-services market according to a trade body, filtered by PulsHR journalists. The KRAZ register is another set: entry, deletion, scope of services, the state as of today. Do not mix those numbers. Do not say in a meeting “GUS said there are 8 thousand agencies”. GUS did not say that in this article. GUS publishes persons in employment and — separately — foreign nationals. A vendor who on one slide staples “8 thousand agencies and 15 million workers, hence the potential” is selling atmosphere. You are buying staffing for concrete halls.
GUS: persons in employment, the enterprise sector, foreign nationals — three different sets
GUS reported 14,988.3 thousand persons in employment as at 31 January 2026 (down 0.4% year on year). That is a measure of people in work, not a measure of agencies. You may not infer from it “what share of the market agencies hold” unless you have your own honest study. Separately GUS on employment in the enterprise sector — first half of 2026: 6,377.1 thousand, down 1.1% year on year. That is again another set (the enterprise sector, not the whole economy). A third set: foreign nationals. Business Insider, 11 August 2026, citing GUS, wrote that at the end of February 2026 more than 1,132 thousand foreign nationals were working in Poland — up 7.1% / 75 thousand year on year. That is coverage of GUS data, not a table we opened in the Local Data Bank. We link the article; we do not pretend to be the statistical office.
Why put these numbers in a software article at all? So you stop planning IT on “market growth”. The agency market according to PFHR is shrinking in headcount of firms (more deletions than entries), and work — especially of foreign nationals — is still there. That means pressure on those who remain: more formalities per person, more documents, more inspection risk, less tolerance for Excel. A temporary-work agency that staffs plants against a backdrop of 1.1 million foreign workers will not win with a “pretty candidate portal”. It will win with a card that watches a document date and the hours on a shift.
- 8,286 agencies at end-2025 — PFHR / PulsHR, industry report, −3% y/y.
- 1,493 entries, 1,756 deletions — the same report: rotation of entities, not a “stable SaaS market”.
- More than 1 million people finding work “thanks to agencies” — so the PFHR report; not GUS.
- 14,988.3 thousand persons in employment (31 Jan 2026, −0.4% y/y) — GUS, not the number of agencies.
- 6,377.1 thousand in the enterprise sector, H1 2026, −1.1% y/y — GUS ssgk, another set.
- More than 1,132 thousand foreign nationals in work at end-February 2026 — BI coverage of GUS, +7.1%.
You size a rollout from your numbers, not national ones. How many people on assignment at the weekly peak. How many active user undertakings. Whether KRAZ lists one service or four. How many foreign nationals hold a document that expires inside 90 days. How many unusual rates (nights, Sundays, piecework, a dirty-work allowance). Until you write that on one page, every ATS demo will “look fine”.
Four services: placement, consulting, career, temporary work — four cards, not one funnel
The valley sells one funnel: lead → CV → interview → offer → onboarding. In a Polish agency that funnel is part of placement and sometimes an entry into temporary work. It is not the whole business. If you drop four services into one “candidate/client” card, the first report for a client, the first invoice and the first inspection will split three ways. Employment-agency software has four products even if the business card has one logo.
Job placement
In placement you are not the employer of the person you introduce — unless you mix this with temporary work, a common operational sin. You run a process: taking the employer’s order, publishing, sourcing, screening, presenting candidates, feedback, sometimes a replacement guarantee. The contract with the employer describes the fee, the guarantee period, a non-solicit. The arrangement with the candidate — if there is one — is more consent, a GDPR information notice and contact rules than an employment contract. A valley ATS is closest to this reality. That is why many agencies should buy eRecruiter, Traffit or HRlink and not write their own jobs engine.
Where placement breaks in a packaged tool: when the same human is in a funnel for a permanent role at client A and a temporary worker of yours on hall B. When the fee depends on the rate, a probation period and whether someone returns after three months. When the client wants a portal “my candidates, my feedback, my shortlists”, not a PDF in mail. When the advert must live on your domain for SEO “production jobs [city]”, not only in the vendor’s cloud. That is still not a reason to write a whole ATS. It is a reason to decide consciously: packaged tool plus integration, or your own person-card sitting above the funnel.
Personnel consulting
Consulting is a project. It has a brief, a team of consultants, a timetable, a deliverable (a report, sessions, assessment, outplacement). The client pays for a project, not for “inserting a candidate”. The data you collect is often deeper than a CV: interview notes, test results, competency ratings. That is different retention and a different processing agreement if subcontractors take part in an assessment. Dumping this into an ATS funnel ends with a recruiter seeing scores they should not, and a consultant having no project. A separate project card. Separate permissions. A separate retention clock.
Career / work counselling
Counselling is a service to a person or to an institution (a school, an office, an employer in an outplacement programme). The file: the session, the plan, the materials. Not “a candidate in a pipeline”. GDPR hurts differently here: data on preferences, health (if someone volunteers limits in a conversation), family situation. Do not keep counselling notes in the same spreadsheet as PESEL numbers for payroll. If you do not provide this service — do not add it in the system “just in case”. KRAZ and the invoice must match what you actually do.
Temporary work
Here you are the employer. A temporary-work agency contracts with the temporary worker, agrees conditions with the user undertaking, assigns the person to work, records time, pays wages, and bills the plant. This is not “recruitment with an extra status”. It is a second, heavier product that a valley ATS usually cannot carry, and that a payroll suite will carry as a payroll, but not as 21:00 shift coverage. Custom employment-agency software starts here: a person card + an assignment card + an hours card + an invoice card for the user.
- One person, many roles: candidate, temporary worker, alumni, candidate again — not a duplicate in four databases.
- One client order ≠ one employment contract: one plant tax id can have twenty assignments and three rates.
- An ATS funnel knows recruitment statuses. It does not know a time limit at a user, piecework, or a gate time clock.
- Payroll knows the payslip. It does not know a portal “confirm hours on the shift” for the shift leader.
- The invoice to the user is counted from hours and rates, not from “candidate accepted”.
- If KRAZ does not list temporary work, the system should not let you issue an assignment “quietly”.
A practical rollout rule: person card and assignment card first, pretty funnel second. Agencies die on staffing and hours, not on the lack of a kanban. You can get a kanban in Traffit for a subscription. An assignment that survives PIP has to be designed around your plants.
The temporary worker: contract, assignment, equal treatment, time limit, accident
The Act on the employment of temporary workers (Journal of Laws 2003 No. 166 item 1508, as amended) describes this relationship. We do not recite article numbers from memory here — you check the current consolidated text, because amendments have happened. For a software decision the operational skeleton the act has imposed for years is enough: a contract, arrangements with the user undertaking, an assignment, information on conditions, equal treatment, time limits, protection if there is an accident. Employment-agency software that does not hold those objects is a CRM with a “temp” sticker.
The contract and arrangements with the user undertaking
Before anyone walks onto a hall you need two arrangements, not one email “that is PLN 32 from Monday”. First: a contract (or a set of contracts) with the temporary worker — type, period, place of work, pay, working time. Second: arrangements with the user undertaking — which work, which qualifications, which conditions at the plant, how time is confirmed, which H&S rules, who supplies clothing. The system must link those two documents to the assignment. When conditions at the user change (another line, another night rate, another supervisor), you do not edit history. You issue a new version or an annex with a trail of who and when.
A common sin: one “framework contract with the plant” in a drawer and twenty oral add-ons on the halls. In a dispute about a rate or a scope of work you are left with a chat. A user-undertaking portal should show current arrangements and accept confirmation of conditions; it does not replace a law firm. But it should end the version nobody signs and everybody “sort of knows”.
Assignment and information on conditions
An assignment is not a PDF from a recruiter’s mail. It is a document that says: this person, this user, this place, this period, this kind of work, these conditions. The temporary worker must receive information on the conditions of work at the user — not “you will find out at the gate”. In the system an assignment has a status: drafted, given to the person, acknowledged, active, ended, cancelled. It has dates. It has attachments (H&S, a workstation instruction if the plant supplied one). It is linked to hours records so you cannot book time on a hall you never assigned anyone to.
- Assignment: person, user, location / line, period, type of work, rate or rate grid, working time.
- Information on conditions at the user: delivered, when, by which channel, whether the person acknowledged reading it.
- A ban on “off-book hours in Excel” without an assignment — the system should block that or flag it as an exception with a reason.
- A change of hall or shift: a new assignment or an annex, not a silent edit of the old PDF.
- End of assignment: date, reason, whether the person returns to the candidate pool or the relationship ends.
- A pack for an inspection: contract, arrangements, assignment, time records, payroll — from one place.
Equal treatment and the time limit
Equal treatment in temporary work is not a CSR slogan. It is a duty that a temporary worker not be treated less favourably than the user’s employees in the same or a similar post — as to working conditions and other benefits the act requires to be equalised. Operationally: you must know the reference conditions at the user (hours, breaks, nights, Sundays, uplifts, clothing, access to facilities). You do not need “comparison AI”. You need a field for where the rate and conditions came from, and a document that supports it. When the plant changes its pay scale, your assignment card must not be asleep.
Limits on the time a person may perform temporary work for one user undertaking are in the act. We do not quote a number of months from memory — you open the current consolidated text and enter the rule in the system as a parameter, not as magic hard-coded forever. The system should count: how long this person has already worked at this user, in which window, whether they replace an absent employee, or whether this is a new task. It should warn before you issue the next assignment, not after payroll has gone out. This is one of the things an ATS funnel cannot do, and that Excel will “sort of handle” until the first person with three breaks in employment and two tax ids linked by capital — and user-group links are a conversation with a law firm, not with a kanban vendor.
Accidents and H&S — a dossier, not “a chat report”
When a temporary worker has an accident at the user, duties collide: the plant, the agency as employer, possibly ZUS, a report, witnesses, the assignment, the induction. An app does not replace the accident procedure or the payer. It should hold a dossier: who was on the shift, which H&S training and when, which PPE was issued, which hours were confirmed that day, who was notified and at what time. A chat photo “something happened on packing” is not a dossier. If the coordinator has Android, an incident with a timestamp, a location and a photo enters the person card and the plant card in a minute, not on Monday morning.
The same applies to medical checks and training. Expiry of medical checks, workplace induction at the user, periodic training — fields with an alert, not a file “in HR’s cupboard, Ania has the key”. We are not a clinic and we do not issue certificates. We hold dates, scans and a block on assignment when a document has expired, if you set it that way. The override must be conscious: an exception with a reason and the person who granted it, because hall life is faster than paper, but a trail must remain.
Foreign nationals: documents and deadlines, not a “visa module instead of a law firm”
The backdrop is known and we will not mythologise it. Business Insider (11 Aug 2026) from GUS data: more than 1,132 thousand foreign nationals in work at the end of February 2026, +7.1% y/y. A temporary-work agency that does not handle this will still meet the topic at the client. Handling it does not mean the software “gets a visa done”. It means the person card has a document dossier, expiry dates, a legality status according to what a law firm or your specialist confirmed, and that the system will not quietly assign someone whose document expired yesterday.
We do not build a voivodeship office. We do not file a work-permit application, a declaration or a residence card for you. We do not interpret whether a given ground for lawful work is met — a human with a mandate and current rules does that. We build: document type, number, issuing body, issue date, expiry date, file, person responsible for verification, 90/60/30/7-day alerts, an assignment block, a register of decisions “exception / stop”. If someone sells you a “visa AI module that replaces a law firm”, they are selling risk. The law firm stays. The system watches the calendar and the trail.
- Dossier: residence, work, insurance, translations — a list of files with dates, not a folder “Ukraine 2024”.
- Forward alerts: not on the expiry day at the gate, but with a lead time you set yourselves.
- An assignment block when a document has expired; an exception only with a reason and a person.
- A split: EU / EEA / Swiss citizens vs persons who need a residence title and a work title — different checklists.
- A GDPR split: residence documents are not a CV; different retention, different access, a different channel to the user.
- The user in the portal sees a status (“document valid until…”, “under review”), not a passport scan they do not need.
- Correspondence with the office and the law firm: a thread on the person card, not the coordinator’s private mailbox.
- We do not invent a list of “all permit types for ever” — document type is a dictionary you and the law firm keep current.
A practice that kills: a spreadsheet “residence-card validity” updated once a month, while the hall changes every day. Or scans in the coordinator’s phone “because the gate asks”. Or sending the user a ZIP of passports “just in case”. Employment-agency software should minimise who sees what: the plant gate gets what the gate actually needs; the shift leader — the roster; the user’s HR — the agreed scope; the law firm — the full dossier. That is a permissions design, not a “shared drive”.
Working-time records and the rate versus the plant’s time clock
Working-time records at an agency are not the same as an attendance list in a chat. On the hall working-time records and a temporary-work agency must live in one model, not in two spreadsheets. They are the record from which the temporary worker’s pay and the invoice to the user are counted. The source may be: the plant’s RCP, a gate reader, a supervisor’s manual entry, the coordinator’s app, piecework from a production system. We do not replace the plant’s time clock. We plug into what the plant already has, or we take an export, or we give Android to confirm the shift when the plant will not open an API. A war over “our reader instead of yours” is the stupidest project you can buy. The truth about the hour should be one, wherever it came from.
Rates, piecework, nights, Sundays — not one “amount” column
A hall rarely pays “PLN 32 an hour and that is it”. It pays nights, Sundays, public holidays, overtime, a dirty-work uplift, a cold-work uplift, a discretionary bonus, piecework per pallet, per kilogram, per unit against a norm. A packaged ATS does not count that. Some payroll suites will, if you squeeze an agency into an employee model. An agency model is different: the same person in one week has three assignments, two rate codes and piecework from one line. Employment-agency software needs a grid: a time component × a rate component × a possible calendar multiplier × piecework. The result goes to payroll / finance; it does not replace the payslip from day one unless you consciously decide that after an audit with the accountant.
A dispute over 0.5 hours on a hundred-person roster is not “a trifle”. It is either people’s trust, or your margin, or both. A process that works: the plant confirms the source (RCP or a supervisor’s sign-off), the agency imports, exceptions (lateness, leaving early, a correction) have a reason and two-sided acceptance, the worker sees their hours before payroll goes out, not after the transfer. The portal and Android exist so a correction lands on Tuesday, not as a complaint the following month.
- Hours source: plant RCP, an export, a supervisor entry, the coordinator’s Android — labelled where the row came from.
- Correction: who, when, old value, new value, reason, whether the user confirmed.
- Piecework: unit, norm, rate, reject — not “type an amount in Excel”.
- Calendar: night, Sunday, public holiday as a dictionary, not hard-coded “as in Germany”.
- A ban on double-booking the same hour on two assignments.
- Worker view: my hours, my uplifts, status “to pay / in correction”.
- User view: confirm the week, report a mismatch with RCP, no silent history edits.
- Export to payroll and finance: an agreed format, not a screenshot.
Android for the shift coordinator
A coordinator will not fill in Excel in hall noise and will not “log into SaaS” in gloves. They need Android: today’s roster, who did not arrive, whom to call from the pool, a clock-in confirmation, a photo of an incident, a note “the line is down”. Offline, because a basement and a metal hall have no Wi-Fi. That is closer to a field-service app than to a candidate portal. We do not turn coordinators into tablet influencers. We make a tool that closes a shift in two minutes instead of copying a notebook for two hours.
Permissions: the coordinator sees their plants and today’s roster, not PESEL numbers of the whole base and not margin rates. The plant supervisor in the portal confirms attendance; they do not browse your candidates from another city. The owner sees exceptions and margin; they do not have to approve every minute. Roles matter more than a heat map of “engagement”. Minute-by-minute surveillance on a hall that is not in the contract will kill a rollout faster than a missing colour theme.
The user-undertaking portal, the invoice and KSeF
The user undertaking does not want “your app”. They want: whom you are sending tomorrow, who will not arrive, how many hours there were last week, when the invoice is coming, where to report that Kowalski did not show for nights. A portal — browser first, mobile first — is for the supervisor, the plant’s HR and the person who accepts the service. Login, roles, only their plants. Not a marketplace “pick an agency”. Not LinkedIn. Roster confirmation, hours confirmation, arrangement documents, a request for the next shift, a service complaint.
An agency invoice → user undertaking is a VAT invoice like any other B2B sale, not a “special HR document”. From 2026 structured e-invoices go through KSeF on the ministry timetable: 1 February 2026 for taxpayers in the first band, 1 April 2026 for the rest — detail and scope at ksef.podatki.gov.pl. More: mandatory KSeF in a company application. If invoices already leave wFirma, inFakt, Optima or the accountant — stay there and integrate lines (hours × rates × plants). If the agency panel still glues a PDF into mail “for the people” — that is debt, not a process.
Invoice lines must be defensible. Not “HR services, PLN 40,000”. A line: plant, period, hours or piecework units, rate, any uplifts, corrections from the previous period. The user in the portal sees a draft invoice before KSeF, so a dispute about 12 hours does not enter a structured correction in a panic. A correction has the same trail: which time-record rows changed. The agency’s accountant remains the accountant. We do not promise “a button that replaces the office”.
- User portal: roster, hours, documents, a demand ticket, invoice status.
- A draft invoice from time-record lines, user acceptance or a clear SLA “no objection by…”.
- KSeF: 1 Feb 2026 / 1 Apr 2026 — as for any taxpayer; not a “separate KSeF for agencies”.
- We do not replace the finance suite; we integrate lines and KSeF numbers.
- Hour corrections ≠ a silent invoice edit. Time records first, then the document.
- Several plants under one tax id: invoice per location or combined — as in the contract, not as convenient in a PDF.
e-Deliveries are not an “HR module”
e-Deliveries are official correspondence, not a chat with a candidate. The timetable on biznes.gov.pl: KRS entities — from 1 April 2025 (for companies already in scope, including “old” ones as described by gov), CEIDG — from 1 October 2026. An agency in a limited company must have a box and an administrator. Employment-agency software can hold letter metadata (reference, date, matter, person), but we do not pretend to be an e-Deliveries provider. We do not mix the ADE address with an SMS “shift tomorrow”. Those are two channels, two regimes, two logs.
ATS and CV retention — a funnel that knows how to die
An ATS is needed. It is not the centre of an agency universe. In placement: the advert, the candidate source, stages, scoring, rejection with a reason, contact consent, consent for future campaigns (separately!), a deletion date. In temporary work: the ATS ends the moment an assignment is born. From that minute the temporary worker card governs. If the status “hired as temp” still lives only as a funnel stage, you do not have records. You have recruitment pretending to be HR.
CV retention is where agencies most like to break GDPR out of convenience. “Keep it, great welder, maybe next year”. Without a basis, without consent for future hiring, without a date — that is not a talent pool. That is a warehouse of data without a purpose. The UODO “ABC of recruitment” guidance recalls an elementary point: when the purpose tied to that recruitment ends, you do not keep the data “because it would be a shame”. The purpose “this recruitment”, the purpose “future offers”, the purpose “defence against a claim” and the purpose “employment relationship” are four different clocks. The system has four dates, not one “active” column.
- CV and letter: source (advert, referral, OLX, a fair, WhatsApp — yes, WhatsApp must be labelled too).
- Information notice: when, which clause, whether the person could actually read it.
- Consent for future recruitments: separate, withdrawable, dated; no consent ≠ we keep it “just in case”.
- Rejection: a dictionary reason (not essays), a message to the person, the retention clock starts.
- PESEL and ID: not at CV stage unless they are truly needed; not in a file password.
- After hiring: recruitment data does not vanish into a black hole — it either enters the employee file with a new purpose, or it is cleaned under policy.
- Export for an access request: one pack, not “we will look in mailboxes”.
- Erasure: really deletes files and copies, not merely hides a row in the recruiter’s view.
eRecruiter, Traffit, HRlink — these are mature ATS products on the Polish market. If your pain is adverts, sourcing and a slide for a corporate client from the funnel, buy them. GESOFT will not beat them on the number of pracuj.pl integrations. We win when the funnel must lock to an assignment, hours, a foreign national and a user invoice in one person model. A common, honest layout: the ATS stays for placement, and a custom engine covers temporary work and the plant portal, with a shared person identifier. Two systems with a bridge are often cheaper than a war for “everything in one from next Tuesday”.
GDPR: controller, processor, request, retention, health data and PESEL
The agency is the controller of candidate and temporary-worker data. The user undertaking is often a separate controller or — for some operations — a party to whom you disclose data. A “SaaS checkbox” does not settle that. GESOFT does not settle it for your law firm either. We build: roles, logs, processing (a contract with us as processor if we host), minimisation, retention, request procedures, encryption, EU hosting, a ban on a shared login “agency / password123”. The mechanics of an app are in GDPR in web applications. Here — the industry specifics.
The data that hurt: PESEL, ID series, a passport scan, residence documents, an account number, medical-check data (a special category), accident data, an assessment score, a note “difficult, do not take on nights”. Each of those has a purpose or should not exist. Do not keep CVs forever in the owner’s mail. Do not paste PESEL into a file name. Do not give the coordinator an export of the whole base “on the phone, they are going to the hall”. Do not send the user a spreadsheet with a column “pesel, mother, child, illness”. The portal has views. Views have fields. Fields have roles.
Access, erasure, objection — a process, not “we will reply somehow”
Operationally a GDPR request is a ticket with a deadline, not an email to the office. Intake: channel, identity of the requester (you do not release a dossier on a first name in an email), scope, deadline. The system gathers: CVs, consents, assignments, hours, invoices insofar as they are the person’s data, logs of “who looked”. A pack to issue. An erasure decision: whether a relationship is ongoing, whether a dispute is ongoing, whether an HR-file duty applies — grounds a human ticks and the system executes. We do not do “automatic deletion of everything after 30 days”, because payroll and the employee file have different clocks from a CV from a campaign that died.
- Controller: the agency. Processor: hosting / GESOFT / SMS / email — processing agreements, not a terms page read after a slash.
- User: disclosure of data necessary for the assignment and H&S, not “the whole file because it is convenient”.
- Recruitment retention ≠ employee-file retention ≠ dispute retention — three policies.
- Health data (checks, accident): narrower access than payroll, logs, a chat ban.
- PESEL: not in a URL, not in an export for the shift leader, not in a ZIP archive password.
- A shared login “office”: banned. 2FA for payroll, the user portal and the owner.
- Backups are also under retention: “deleted in the panel, lives in backup 90 days” must be described, not accidental.
- Notices: separately for a candidate, separately for a worker, separately for a “job offers” newsletter you may not even run.
UODO’s recruitment materials stress the catalogue and the purpose. An agency is tempted to collect “more, because the client asks for everything”. The client may ask. You may refuse to collect surplus, or collect on a basis that defends itself. The system should make it hard to add a “blood group” and “marital status” field without a controller decision. Form flexibility without discipline is a generator of breaches.
SaaS versus custom: eRecruiter, Traffit, HRlink, payroll — buy them if they suffice
The market is not empty and we will not pretend it is. eRecruiter, Traffit, HRlink — Polish ATS products that know adverts, sourcing, stages, a report for a corporate client, often GDPR in the recruitment scope. Payroll suites (Comarch, enova, Symfonia, specialist payroll engines) know the payslip, ZUS, PIT, absences. Work-site portals of large agency networks have sometimes been built in-house for a decade. If you are a placement agency with twenty processes a month and no temporary work — do not start with Laravel. Buy an ATS, sign processing, demand an export, set retention.
SaaS wins when: one service (or two weakly linked), a standard funnel, standard hourly pay, no Android on the hall, no piecework, no pressure for a user portal, a wish to start in weeks. You pay a subscription. The roadmap is the vendor’s. The data sits with the vendor. That is honest if you enter it with your eyes open. A custom system wins when: temporary work + placement + foreign nationals in one process; a user-undertaking portal under your domain and your roles; Android for the coordinator (offline); unusual rates and piecework; integration with finance and with a specific plant’s time clock whose IT will not join your SaaS; or when a licence “per recruiter seat” stops making sense on a large temporary roster, because there are eight recruiters and eight hundred people in halls.
We do not burn a working ATS in order to “have everything ours”. The most common GESOFT project in this niche is a bridge: a master person card, assignments, hours, a portal, Android, an invoice — and the recruitment funnel stays where recruiters already know how to click. Or the other way around: the payroll engine stays, and we do not pretend to be the ZUS payer. Boundaries are a feature of a mature brief, not a lack of ambition.
GESOFT: what we build and what we do not promise
We build web applications (Laravel, Vue) and Android. For an agency that means: a person card (candidate / temporary worker / alumni), a client and plant card, an assignment card, working-time records, a rate and piecework grid, a user portal, coordinator Android, GDPR retention and requests, an export to finance, a KSeF number if the invoice leaves the panel, a KRAZ dossier and a posting of workers dossier. The stack is ours. The process is yours. We do not sell a “PIP-certified package”. We do not have a ministry stamp.
The topic of posting of workers (Directive 2018/957, the IMI/SIP system): we do not build IMI. We are not the link to the host-state administration. We hold a posting dossier: who, where, for which period, which documents left, which host-country rates you agreed with the law firm, who the contact person is, when the return is. Date alerts. A pack for the file. The same honest sentence as for visas: the law firm and IMI stay outside GESOFT. The app must not lose the PDF a host-state inspection will want to see.
What we do not do at the start, even if it looks pretty on a roadmap: a native “candidate app in the store” (a mobile portal is enough); a Poland-wide jobs marketplace; an engine that “legalises a foreign national by itself”; a chatbot that answers a GDPR request; replacing the plant’s time clock; replacing e-Deliveries; a general ledger. An MVP that makes sense: a person card, an assignment, hours from an import or from Android, a user portal to confirm the week, CV retention. The rest — when the first payslip and the first invoice do not lie.
- Yes: one person card that will survive PIP and a GDPR request.
- Yes: a user-undertaking portal and coordinator Android.
- Yes: unusual rates, piecework, RCP import, a bridge to finance and to an ATS if the ATS stays.
- Yes: a KRAZ dossier, a foreign-national dossier, a posting dossier — as a calendar and files, not as an office.
- No: ZUS payer, voivodeship office, IMI, PIP, the marshal and STOR/KRAZ.
- No: “we will implement the act for you over a weekend”.
- No: burning eRecruiter / Traffit / HRlink on principle.
- No: a promise of a specific PIP fine amount — you check the current consolidated text.
A checklist before the brief, and how to write to us
Before you send “build us a valley ATS”, answer the questions below. If more than three come back “we do not know”, the problem is not a lack of Vue. The problems are the register, the service and the records. Write to GESOFT: how many people on assignment at the peak, how many active user undertakings, whether KRAZ lists one service or four, whether hours come from the plant RCP or from a notebook, whether there is piecework, how many foreign nationals with a document on a date. Within 24 hours you get an honest recommendation: stay on SaaS, build a bridge, or build an assignment engine. No slide about synergy.
- What do you actually have in KRAZ: placement, consulting, career, temporary work, a job board? Do invoices and contracts cover that?
- How many people on active assignments at the weekly peak, and how many in the trough? (Not “the annual average from marketing”.)
- How many user undertakings and how many locations? Does each want its own login?
- Where do hours come from today: RCP, PDF, Telegram, a slip of paper, the supervisor’s spreadsheet?
- Is the rate one hourly figure, or a grid + piecework + nights + Sundays?
- How many foreign nationals, and who watches document dates — a law firm, a hire, “Ania after hours”?
- Where does the ATS live: eRecruiter / Traffit / HRlink / Excel / a mailbox? Are you allowed to leave it?
- Where are payroll and ZUS? (We leave them until there is a reason to move.)
- Does the invoice leave payroll, finance, or Word? Who will enter KSeF on 1 Feb / 1 Apr 2026?
- Has there already been a GDPR request or a PIP inspection that stuck on finding assignments?
- Is posting of workers a real process, or a slide on the website?
- Who will own data and retention: the owner, payroll, the DPO — a name, not a department.
- Android: how many coordinators in the field, is there coverage on the hall, must it work offline?
- A decision after this list: SaaS / a bridge / a custom engine — with a review date, not “sometime”.
An agency owner who buys peace at an inspection and at an access request is buying a boring system. Boring means: the assignment exists, the hours match, the document has not expired, the CV does not live forever, the invoice has lines, the plant portal does not call at 22:00 to ask “who is coming tomorrow”. That is the whole product. The rest — AI CV scoring, reco gamification, “talent pool 3.0” — can wait until the first hall stops living on Telegram.
Frequently asked questions
- Will employment-agency software replace eRecruiter, Traffit or HRlink?
- Not as a matter of principle and not in the first sprint. If your pain is the funnel, adverts and a report for a corporate client — buy a mature ATS and demand an export and a processing agreement. GESOFT steps in when temporary work, a user-undertaking portal, coordinator Android, piecework or foreign nationals do not fit the funnel. A common layout: the ATS stays, and we build the assignment, hours and invoice card with a shared person identifier.
- Does GESOFT enter the agency in KRAZ or file with the marshal for us?
- No. From 1 June 2025 an application for entry is filed electronically only through STOR/KRAZ (stor.praca.gov.pl) to a voivodeship labour office or a marshal’s office; the marshal of the voivodeship enters you in the register (biznes.gov.pl ou102). We can hold an entry dossier (number, service scope, dates, scans) on the company card. We are not an office and we do not click the application for you.
- How many employment agencies are there in Poland?
- According to the Polish HR Forum industry report “The HR services market 2025” (PulsHR coverage 2 March 2026) there were 8,286 agencies at end-2025 (−3% y/y), 1,493 new entries and 1,756 deletions; the report also speaks of more than 1 million people who found work through agencies. That is not a GUS table. GUS reports, among other figures, 14,988.3 thousand persons in employment (31 Jan 2026) and — in BI coverage — more than 1,132 thousand foreign nationals in work (end of February 2026). Those sets must not be stapled into one sentence “that is how many agencies there are”.
- How does a candidate card differ from a temporary-worker card?
- A candidate lives in the ATS: advert, stages, consents, CV retention. A temporary worker lives in an employment relationship with the agency: a contract, an assignment to the user undertaking, time records, a rate, medical checks, residence documents. That is the same person under one identifier and two data regimes. A funnel that “hires as temp” as a recruitment status will not survive a PIP inspection.
- Will the system count the temporary-work time limit at one user?
- Yes — as a parameter from the current consolidated text of the temporary-workers act, not as a number hard-coded from a programmer’s memory. The system warns before the next assignment. Interpretation of capital links between users and of exceptions stays with the law firm. We hold the counter and the trail.
- Do you build a visa module that replaces a law firm for foreign nationals?
- No. We hold a document dossier, expiry dates, alerts, an assignment block and permissions for who sees a scan. We do not file applications with the voivodeship office, we do not interpret grounds of lawful work, and we do not sell “visa AI”. The law firm or your specialist stays. The calendar stops living in Ania’s spreadsheet.
- From when does KSeF apply to agency invoices to the user undertaking?
- As for any VAT taxpayer in scope: 1 February 2026 or 1 April 2026 according to the ministry bands and timetable (ksef.podatki.gov.pl). There is no separate “KSeF for agencies”. If invoices already leave finance — we integrate lines from hours records. If you still glue a PDF in Word — that is a project topic, not decoration.
- Will the app replace the plant’s time clock or ZUS payroll?
- The plant RCP remains the source of hours if the plant has one; we import, reconcile, correct with a trail. We do not fight the client’s gate reader. Payslips, returns and contributions stay with the payer (you + your payroll suite / the accountant). We are not the ZUS payer. A bridge to finance and payroll — yes. Taking over ZUS in a weekend — no.
- What about e-Deliveries and posting of workers?
- e-Deliveries: KRS from 1 April 2025 (companies already in scope), CEIDG from 1 October 2026 — biznes.gov.pl. We hold letter metadata; we do not pretend to be an ADE box. Posting: Directive 2018/957; IMI/SIP stays outside us; we hold a posting dossier (who, where, period, documents, rates agreed with the law firm). We do not build IMI.
- How do we start and what do you need in the brief?
- On /kontakt: headcount on assignment at the peak, number of plant-clients, whether KRAZ is one service or four, where hours come from, whether there is piecework and foreign nationals, which ATS and which payroll already stand. We reply in 24 hours: stay on SaaS, build a bridge, or build an assignment engine. A candidate mood board is not required.
Describe your project