Skip to main content

Technical screening

Find out who can actually write the code.

Candidates write and run real Python in the browser. Hidden tests grade it automatically. No video of the candidate is ever recorded.

Python is the only language the sandbox runs. Choice questions carry the rest of your stack.

Assessment — Python coding questionIllustration
Task

Merge the overlapping busy blocks and return them sorted by start.


            
            def merge_busy(slots):
          
            
                """Merge overlapping and touching blocks."""
          
            
                # your code here
          
            
            
          
            
            
          
            
            
          
            
            
          
Output1 passed
Visible testassert merge_busy([(60, 90), (0, 30), (85, 120)]) == [(0, 30), (60, 120)]

One test case is visible. The hidden ones decide the score.

How it works

Build it, send it, they take it, you read it.

Four steps, in the order you would actually use them.

  1. 01

    Build the test

    Start from a role template, or paste in a job description.

  2. 02

    Invite candidates

    One single-use link each, locked to the person you sent it to.

  3. 03

    They take it

    In the browser, under a timer. Nothing to install.

  4. 04

    Read the result

    Graded automatically. Export to CSV, Excel or PDF.

Prefer to see someone do it? We walk you through it live in 20 minutes.

The platform

Four things that decide whether this works for you.

Everything below is built and shipping today. Nothing here is a roadmap item.

The test builder

Paste the job description. Get a test you can edit.

A recruiter never has to write a question. A person always approves the one that goes out.

InJob description

Backend developer — Python, 3+ years.

REST APIs, PostgreSQL, query performance.

OutDraft assessment — every question editable
  • Python codingMerge overlapping busy blocks
  • Single choiceIdempotent PUT under the HTTP spec
  • Multiple answerComposite index lookups
  • It assembles a matching assessment from the library. It does not conjure one.
  • Coding tasks are re-verified against the real grader before you see them.
  • No model decides pass or fail — a score or recommendation in model output is discarded on our server.

Integrity without surveillance

We record signals. We do not record the candidate.

More than a dozen signals, each stamped with a time and shown beside the answers.

Recorded during the assessment

Illustration
  1. 02:14Tab blurred — 38s away
  2. 04:02Paste into the editor
  3. 07:41Fullscreen exited
  4. 09:58Cursor left the window
  5. 11:20Second screen present
  6. 14:06No face in frame — 40s

What never happens

  • No video is recorded or stored. There is no recorder in the product.
  • The camera frame is analysed on the candidate’s own device.
  • No identity matching. The model counts faces; it does not recognise anyone.
  • The assessment makes zero cross-origin requests.

Signals are surfaced to a person as flags. Telling a candidate the outcome is always a human click.

Coverage depends on the browser: Chromium reports second screens, Firefox and Safari do not, and on its own it never flags an attempt.

What you get back

One report a non-technical recruiter can read.

Score, per-question results and integrity flags on one screen — exportable.

Attempt — candidate reportIllustration

A. Nowak — sample candidate

Backend developer — Python

Score

82 / 100

  • Python codingMerge overlapping busy blocks4/5 hidden tests
  • Single choiceIdempotent PUT under the HTTP specCorrect
  • Multiple answerComposite index lookups2/3 selected

Integrity2 flags, shown beside the answers

Export — CSV · Excel · PDF

  • An optional pass mark you set ranks attempts. Candidates never see it.
  • Flags are signals for you to weigh — never a machine verdict.
  • Telling the candidate the outcome is always a human click.

Questions and templates

Three question types. One of them runs.

A recruiter starts from a template, not an empty page.

  • Example · single choice

    The same PUT is sent twice, same body. What should the second request do?

    • Leave the resource as the first request left it.
    • Create a second resource.
    • Return 409 Conflict.
  • Example · multiple answer

    One index on (tenant_id, created_at). Which lookups can use it?

    • Filter on tenant_id alone.
    • Filter tenant_id, sort created_at.
    • Filter on created_at alone.
  • Example · Python coding

    Merge the overlapping busy blocks and return them sorted by start.

                def merge_busy(slots):
        """Merge overlapping and touching blocks."""
        # your code here
              

Role templates plus a growing library. We load what your stack needs before your first invite.

Pricing

Flat pricing, and the same product behind each one.

The same number every month, whether a candidate finishes, abandons, or never opens the link.

  • Basic

    €20/ month

    One hiring lead, screening for a role or two at a time.

  • Core

    Most teams

    €80/ month

    A team hiring developers continuously, with results other people read.

    Up to 10 team members

  • Pro

    €150/ month

    Several roles at once, or more than ten people who need access.

    Unlimited team members

  • Enterprise

    Custom

    Higher volume, or a custom arrangement to work out together.

    Priced by arrangement

In every tier, including the cheapest one

  • Real Python, run in the browser, graded against hidden tests.
  • Job description in, draft assessment out, approved by a person.
  • Role templates and the question library, loaded for your stack.
  • More than a dozen integrity signals, surfaced to a person as flags.
  • No candidate video, because nothing is ever recorded.
  • Per-company API keys, the public REST API and signed webhooks.
  • Traffit — the only ATS connector we have, so the only one we name.
  • CSV, Excel and PDF exports, with the columns you choose.
  • Delete or correct a candidate’s data in one click.
  • An onboarding call where we set up your first assessment with you.

No credits, nothing expires, no add-ons — the number you see is the invoice.

Around 1,000 candidates a month is where we would want to talk — a conversation, not a cut-off.

Only Core states a number, and it is plan policy: nothing in the product counts seats.

There is no checkout. After a demo, Vertex Recruitments invoices you directly.

Before you ask

The awkward questions, answered first.

Short answers, with the caveats attached.

What we don't do

  • Python is the only language we execute.

    Every other stack is covered by choice questions, drafted in the language you hire for.

  • We won't print a question count.

    A number on a marketing page is disproved in the first minute of a trial.

  • No AI phone screens. No automated CV scoring.

    Both were on the table. Both were rejected.

  • No checkout. You cannot buy this in a browser.

    The prices are real; the invoice comes from a person.

  • The assessment needs a desktop browser.

    On a touch-only device the integrity checks are structurally inert.

  • We are early, and you will talk to the people who built it.

    One pilot customer, a small team, and no account manager in between.

Which languages can candidates write code in?

Python. The candidate writes and runs it in the browser, and the submitted answer is graded on our servers against hidden tests, inside execution limits of 12 seconds and 1MB with an import denylist.

For any other stack the coverage comes from single-choice and multiple-answer questions, and the builder drafts them in the language you are hiring for. A senior Go role gets Go questions. What it does not get is Go running in the sandbox.

Counting languages means maintaining a sandbox for each one. We maintain a single execution path and put the effort into the question instead. Whether that trade works for you depends on whether running the code is the part of the screen you actually need.

Can a candidate just answer with an LLM?

They can, and we do not claim to stop it. No browser-based assessment can, and any page that says otherwise is selling you something it cannot deliver.

What the product does is record the behaviour that tends to come with it and put it in front of you: paste events from the clipboard and from drag-and-drop, tab switches with the time spent away, fullscreen exits, the cursor leaving the window, blocked shortcuts, network drops, and second-screen presence where the browser reports it.

Coverage is browser-dependent, and that matters here. Second-screen presence is reported by Chromium browsers and is unavailable in Firefox and Safari, and on its own it never marks an attempt. A person reads the flags in context and decides.

The pattern most teams settle on: use the assessment to filter, then spend fifteen minutes talking to the candidate about the code they submitted.

Do you record video of candidates?

No. There is no recorder in the product — no capture, no upload path, nothing stored. Our candidate privacy notice says so in writing.

With the candidate’s explicit consent, a small face-detection model loads from our own origin and runs on their own device. It counts faces. No frame, no image and no biometric template leaves the browser; what reaches us is counts and durations, of the form "no face detected for 40 seconds".

It is also not identity verification. The model does not match anyone against anything, and there is no ID-document step.

Does the AI decide who passes?

No, and it is prevented from trying. If a model response comes back containing a score, an integrity judgement or a hiring recommendation, it is discarded on our servers before a recruiter ever sees it. That refusal lives in the code, and it is how we stay outside the automated-decision rules in GDPR Article 22.

Grading is deterministic: fixed answer keys for the choice questions, hidden tests for the Python task. An optional pass mark sorts graded attempts into pass and fail — you set the threshold, and candidates never see it.

Telling a candidate the outcome is always a human click. There is no automatic rejection anywhere in the product, by design.

Where is our data stored, and who else processes it?

All persisted candidate data is stored in Frankfurt — the application and the database — and error tracking sits in the EU, in Vienna.

Inside the product we publish a sub-processor register naming every vendor, what it processes and where it sits, including the ones outside the EU. Read that instead of taking a badge from us.

One caveat, because it is the one people miss: the optional AI test-creation feature sends the text you paste in — a job description — to a model provider outside the EU. That step runs before any candidate is invited, and it is optional. Build the test manually and it never runs.

What do candidates need in order to take the test?

A desktop or laptop browser, and nothing installed. No plugin, no desktop app, no local Python — the editor and the runtime are served from our own origin, and the assessment makes zero cross-origin requests.

A compatibility check runs before the assessment starts, so an unsupported browser is caught up front instead of halfway through a timed test. Phones and tablets are out: on a touch-only device fullscreen enforcement, cursor tracking and second-screen reporting are structurally inert.

There is an unscored practice question first, so the editor and the Run button are familiar before anything counts. It is not a rehearsal of the real conditions: practice has no timer and records no integrity signals.

How does billing work, and what does it integrate with?

There is no checkout, and no card form on this site. After a demo we agree a plan, Vertex Recruitments invoices you directly, and we set up your workspace. Self-serve billing is in progress; until it lands, a person handles it.

Results leave the product as CSV, Excel or PDF, through per-company API keys and a public REST API, or through signed webhooks with a delivery ledger and automatic retries. All of that is included from the entry plan up.

Traffit is the only ATS connector we have, so it is the only one we name: moving a candidate into the test stage sends the assessment, and the result is written back. Slack works by pasting a webhook URL. Zapier works too, but the app is still private, so we share it with you directly rather than through the directory.

Can I try it on a role we are actually hiring for?

Yes, and that is what the demo is. Bring a live job description. We build the assessment for that role with you on the call, and you preview it exactly as the candidate will see it — answer key stripped, no attempt written.

There is no free-trial button, because signing up alone creates a company that sits unapproved until we look at it. Talking to us is faster than waiting on that.

Next step

Bring a role you're hiring for.

One call, one action. There is nothing else to sign up for on this page.

20 minutes, screen-share, and we build a test for that role with you.

Or write first — it reaches a person, not a ticket queue.leonardo@candidcheck.com

Leonardo Rodovero · Product and engineering — builds and runs the platform

CandidCheck is operated by Vertex Recruitments in Warszawa, under Polish law.