Comparison

2Mig compared with a visa agency

An agency sells you the outcome of its own judgement, and you cannot inspect that judgement. We are built the other way round: every requirement we show you carries the norm it comes from, the date we checked it, and the version of the rule applied.

Where we stand today, stated first: no corridor is open yet, document upload is switched off, and we have no fee. This page compares how the two approaches work, not which one you can buy this week.

Why people go to an agency

Both reasons are real, and neither is solved by telling someone to try harder.

  • Someone else carries the uncertainty

    Rules are scattered across portals, consular pages and hearsay, and they change without announcement. Paying a person to hold that uncertainty is a rational trade when you have one trip and no way to check the answer.

  • Someone else does the repetitive work

    Filling the same twelve fields into a portal that times out, ordering documents in the sequence a specific consulate expects, chasing a certificate in the format they accept. This is genuine labour, and it is why an agency has customers.

  • There is a person to ask

    When something is unclear, you can phone someone. That matters more than any feature, and an interface that answers a question with silence loses to it every time.

  • Connections we cannot replicate

    One Almaty agency leads with “former consular staff work with us”, and sells choosing the country of submission as expertise. That is a relationship, and no amount of software reproduces it. We are not pretending otherwise — but note it is also unverifiable: you are asked to take the connection on trust.

  • You can pay monthly

    Local agency quotes carry instalments as standard — a package priced around 70,000 ₸ shown as roughly 2,900 ₸ a month over 24 months. That reframes the whole comparison, because a monthly figure reads as cheaper than any lump sum.

None of that is a criticism of agencies. A good one earns its fee. The problem is narrower and it is structural: you cannot verify a single thing a good one tells you, which means you cannot tell it apart from a bad one until the decision arrives.

What we do differently

  1. Every requirement names its source

    A check does not say “you need this”. It says which norm requires it, when we last verified that norm, and which version of the rule was applied to your case. Where we have not verified a requirement against a primary source, the requirement says so instead of implying it is confirmed.

    RuleSource on every rule; RequiredDocument.source is null when unverified

  2. “Cannot check this” is a visible answer

    A check does not answer yes or no. Alongside satisfied and violated there is not-enough-information — with the missing fields listed — plus does-not-apply-to-you, and not-yet-reviewed for a requirement we have not published. An agency has no way to tell you any of the last three, so a gap in their knowledge reaches you as reassurance.

    FindingStatus: SATISFIED / VIOLATED / NOT_APPLICABLE / UNKNOWN / NOT_PUBLISHED; an empty field never passes

  3. You are only asked for documents you actually need

    A document's necessity is a condition evaluated against your profile, not a fixed list. A student is not asked for an employment certificate — the document is not shown at all rather than marked optional. When a condition cannot be evaluated yet, it says “may be needed” and names the field that would settle it.

    requiredWhen as a predicate, three states including UNDETERMINED

  4. The record of your case cannot be edited afterwards

    Every step is appended to a log that a database trigger forbids updating or deleting — not a policy, an enforced constraint. Nobody on our side can quietly revise what happened to your application, including us.

    case_events_no_update trigger, migrations/0001_init.sql

  5. You can take your data back, and get a receipt

    One request removes your values from storage and returns counters saying how many disappeared. Not “done” — the actual number, because a promise of deletion with no proof is not a promise. The step is recorded in the log, so the deletion itself is provable.

    DELETE /v1/cases/{id}/profile, the PROFILE_ERASED event

  6. Timing is arithmetic you can see

    We name a window — “apply between the 20th and the 27th” — computed by the server from the destination's published processing time, and we show which figure it came from. Never a minute of issuance: that would be a commitment on behalf of an immigration service neither we nor an agency controls.

    corridors/submission-window.ts, computed from the manifest

  7. We never invent the Latin spelling of your name

    The ICAO transliteration table does not contain the Kazakh letters Ә, Қ, Ң, Ө, Ұ, Ү, and Kazakhstan's own system is not one-to-one — one person can have several legitimate Latin spellings. So we do not derive your name and do not “correct” it: the machine-readable line is shown to you as it stands, and you confirm the spelling. A system that checked your name for exact equality would flag correct documents as wrong.

    no corridor extracts a name; enforced by tests in document-requirement, mrz-extract and passport-extraction

  8. Where you apply is a rule, not an opinion

    The same country can refuse very differently at two of its own missions: in 2025 Germany refused 18.0% of applications in Almaty and 5.4% in Astana. An agency sells navigating that as expertise. We treat which state examines your case as a legal question — the Visa Code's main-destination article — so the answer carries a citation. We do not yet tell you which city to choose: that needs data we have not published.

    European Commission consular statistics, 2025; Visa Code Art. 5 (main destination)

Side by side

Rows where our cell is unfilled are marked, with the reason in the cell. There is no row here we have quietly skipped.

2Mig compared with a visa agency, feature by feature
2MigA visa agency
Where a requirement comes fromThe norm, the date we checked it, and the rule version — on screenThe agency's own word
When something cannot be verifiedSays so, and lists the missing fieldsUsually reaches you as reassurance
Document listConditional on your profile; a document you do not need is not shownTypically one list for everyone
Record of what happenedAppend-only log; a database trigger refuses editsThe agency's internal notes
Getting your data deletedOne request, and counters showing what wentBy agreement, unverifiable
Approval chanceNot published, and not calculated at allOften quoted as a percentage
Who submits the applicationYou do, on the official portal; we prepare and checkThe agency, usually with your credentials
Your portal passwordNot asked for and not stored todayFrequently held by the agent
PriceNo fee is setWe have no fee in the model and no payment system, so our side of this row is genuinely empty. The agency figure is one quote we hold on paper, from August 2026 — not a market range, and we will not present it as one. It also buys something different: a four-person team seeing a case through, against software that prepares and checks while you submit. Comparing the two numbers without saying that is how a price conclusion goes wrong.One Almaty agency: 70,000 ₸ for a Schengen package, consular fee separate
TurnaroundNo figureNo corridor is open, so no application has been prepared end to end. A time quoted before the first one would be a guess wearing a number.Quoted per agency
Uploading documentsSwitched offUpload answers with a refusal rather than accepting files. Kazakh law requires personal data to be stored inside the country, and since 12 July 2026 to be collected and processed there too — so this is not caution, it is the law, and it needs a data centre here plus a legal opinion. Accepting a passport we could not then delete is worse than not accepting it.Accepted
Submitting on your behalfNot enabled; a recorded authority exists in the model, unusedActing in someone's name before a government needs a recorded mandate and a legal opinion. Both are open tasks, so the mode stays “you submit, we prepare”.Standard practice
Someone to phoneA request queue an operator picks up; no reply channel yetYou can flag that you want a specialist and an operator sees it. We have no channel to answer through yet, so the screen says that plainly rather than showing an input box that goes nowhere.Yes, and it is their main advantage

Five of thirteen rows are unfilled on our side. We would rather show you the count than let a table imply a service that is not running yet.

What we will not do, whatever we build

These are constraints in the code and in recorded decisions, not aspirations.

  • Quote you a chance of approval. We do not calculate one, and anyone who quotes you a number for your application is showing you an average of other people.
  • Sign a government form as you. For some destinations that is explicitly forbidden; for the rest it is still not ours to do.
  • Hold your password for a government or operator portal.
  • Pass your government fee through us. You pay the state directly.
  • Tell you a requirement is confirmed when we have not checked it against a primary source.
  • Derive a reason for refusal ourselves. If one is given, it is recorded exactly as it reached you.

What you can do today

No corridor is open, so there is no application to start. What exists is the honest version of the front door: the routes we are preparing, what each one is still waiting on, and a walkthrough of the process on synthetic data.

The walkthrough uses invented data. There is no real passport, payment or consular submission in it, and it is labelled as such on every screen.

Weighing it against doing the whole thing yourself? 2Mig compared with applying on your own