Docs · Undetected RPA

RPA guide

Pro planWindows 10 / 11Updated October 2026EnglishTürkçe

Kryptix RPA repeats what you would do by hand in a browser profile: open pages, click, type, wait and read data. It does this in many profiles at once. You build a flow from steps in the editor, test it on one profile, then run it on as many profiles as you need.

Kryptix RPA editor with a flow open
The editor. Flows are on the left; the open flow's steps run from top to bottom. An If / else step has its own lane for each outcome.

How it works

Runs inside the browser

Every action goes through the browser's own input pipeline. There is no CDP connection, no script injected into the page and no extension, so the page cannot tell it is being automated.

Your mouse and keyboard stay free

RPA never sends clicks or key presses to Windows. You can keep working while flows run; your real cursor does not move.

The cursor stays in its window

The cursor that shows where RPA clicks is drawn only over that profile's own window. When the window is in the background, so is the cursor.

CAPTCHAs are never solved for you

When a CAPTCHA or an unusual-traffic page appears, the flow pauses and tells you. Solve it yourself and press Resume. Kryptix does not try to get past security checks.

RPA is part of the Pro plan. See plans

Your first flow

  1. Create a flow

    Open RPA from the side bar. Press + New, or start from Templates. Name the flow, then choose a profile in the box next to the name. That profile is used by Pick, Test and Record while you build; it does not limit where the flow runs later.

  2. Add steps

    Press + Add step and pick a step type; the search box finds steps by name. Steps run from top to bottom. Drag the ⋮⋮ handle to reorder and use ⧉ to copy a step. If / else and Loop have lanes of their own; add steps inside them the same way.

    Add step dialog with step categories
    The step picker groups steps by category: Navigation, Interaction, Waiting, Data, Logic and SMS.
  3. Point at elements

    Steps that act on an element take a selector. Press Pick and click the element in the profile's window; the selector is filled in for you. Smart suggests selectors built on stable attributes (name, aria-label, data-testid) instead of class names that change. Test shows how many elements match and Highlight outlines the match in the browser. For pages that change often, add a fallback selector or find the element by its visible text.

    Click step with selector tools Pick, Smart, Test and Highlight
    A Click step open for editing. “Scroll into view if needed” first brings elements inside lists and scrollable boxes into view.
  4. Run on your profiles

    Press ▶ Run…, choose the profiles and set how many run at the same time. Profiles start one after another with a random delay from the start-interval range. Attach a CSV or Excel file to give each profile its own row (for example its own login), and choose whether profiles close at the end. Instant profiles create a fresh profile for every run and delete it afterwards.

    Run flow dialog: flow and profile selection
    Choose the flow and the profiles. The order you click them in is the order they run in.
    Run flow dialog: concurrency, start interval, data file and more
    Concurrency, start interval, data file, what happens to the profile at the end, window tiling and debugging.
  5. Watch, resume, retry

    The Runs tab shows every profile live: status, progress, current step and message. Click a row for its steps, log, data row and results. A paused profile waits for you: deal with what is on the screen and press Resume. When the job ends you can retry the failed ones and export the results as CSV or JSON.

    Runs tab with five profiles, one paused at a CAPTCHA
    Store 3 reached a CAPTCHA and paused; the other profiles keep going. Example data.

Step reference

Kryptix has 56 step types. Search by name or by what you want to do, or pick a category.

Navigation

Pages, tabs and frames.

Go to page

Opens an address and, if you want, waits for it to load. Variables work in the address.

Use it for: The start of almost every flow.

Example · https://shop.example.com/login

Back / forward / reload

Goes back or forward in the tab's history, or reloads the page.

Use it for: Leaving a wrong page; refreshing content.

Wait for load

Waits until the page has finished loading.

Use it for: After a click that opens a new page.

Tab management

Opens a new tab, switches to a tab, closes one or all others, or waits for a pop-up and switches to it.

Use it for: “Open in new tab” links, payment pop-ups.

Enter / leave iframe

Moves the following steps inside an iframe on the page, and back out again.

Use it for: Embedded payment forms, embedded log-in boxes.

Example · Enter iframe#payment … steps … Leave

Alert / confirm dialog

Answers alert, confirm and prompt dialogs automatically. The dialog is never shown.

Use it for: “Are you sure?” and “Leave this page?” questions.

Screenshot

Saves a picture of the page. A screenshot is also taken automatically when a step fails.

Use it for: Proof of each step; checking the result by eye.

Example · File name step_{{run}}

Wait for download

Waits until a file has downloaded and stores its name and path in a variable.

Use it for: Reports, invoices, “Export” buttons.

Get page info

Stores the current address, the title or the page text in a variable.

Use it for: Checking where a redirect went.

Interaction

Working with elements the way a person does.

Click

Clicks an element along a curved, human-like mouse path; double and right click too. If the element is below the fold or inside a list, it is scrolled into view with real wheel scrolling first.

Use it for: Buttons, links, menu items.

Example · button[type=submit]

Hover

Moves the mouse over an element without clicking.

Use it for: Menus that open on hover, tooltips.

Random click

Picks one of several selectors at random (from those present on the page) and clicks it.

Use it for: Adding natural variation; buttons whose order changes.

Click by text

Clicks the element whose text matches exactly, so “1” never hits “10”. Narrow it down with a container selector or an anchor (the nearest element to a label such as “Day”). With scrolling on, it scrolls the open list itself until the option appears.

Use it for: Drop-downs with random class names, date pickers, long option lists.

Example · Scope [role=option], text 2001

Drag and drop

Drags one element onto another with the mouse. HTML5 drag of images and links is not supported.

Use it for: Sliders, sortable lists.

Type

Types into a field at human speed, with an occasional typo that is fixed with Backspace. The value can be fixed text, a random pick from a list or a number range.

Use it for: Usernames, search boxes, forms.

Example · input[name=email] ← {{email}}

Press key

Sends Enter, Tab, Esc or a shortcut to the page, not to your keyboard.

Use it for: Submitting a search with Enter; moving between fields.

Example · Enter · Ctrl+A

Scroll

Scrolls the page by pixels, or brings an element into view. Scrollable boxes and open lists are scrolled too, not only the page.

Use it for: Lazy-loaded content, reaching the bottom of a page.

Select from dropdown

Chooses an option in a <select> box by visible text, value or position, or at random.

Use it for: Country, city and quantity fields.

Checkbox / radio

Checks, unchecks or toggles a checkbox or radio button.

Use it for: “I accept the terms”, preference options.

Upload file

Gives a file to an upload field. The file dialog never opens.

Use it for: Profile photos, documents.

Waiting

Pausing until the right moment.

Wait (duration)

Waits a fixed time or a random time from a range.

Use it for: Natural pauses between actions.

Example · Random 800–1600 ms

Wait for element

Waits until an element exists, becomes visible or disappears.

Use it for: Waiting for a loading spinner to go away.

Wait for URL

Waits until the address contains, equals or matches a value, or simply changes.

Use it for: Waiting for the dashboard after logging in.

Example · contains /account

Wait for text

Waits until a text appears or disappears on the page or inside one element.

Use it for: Waiting for “Saved” or “Payment successful”.

E-mail verification code

Reads a verification code from an inbox: a saved account, Gmail (IMAP with an app password), Outlook/Hotmail (OAuth) or any IMAP server. It picks the real code, not numbers from the address or the year, and you can force the number of digits. Last N minutes = 0 means no time limit.

Use it for: One-time codes sent by e-mail.

Example · Outlook: {{mail}} / {{token}} → code, 6 digits

Wait for manual action

Pauses the flow with your message. It continues when you press Resume in the Runs tab.

Use it for: CAPTCHAs, a one-off manual step.

Example · “Solve the CAPTCHA, then press Continue”

Data

Reading data from pages and files, variables, text and numbers.

Extract data

Stores an element's text, attribute or value in a variable.

Use it for: Reading a price, a balance, a username.

Example · .account-balance → balance

Extract all matches

Builds a list from every element that matches.

Use it for: Search results, product lists, all links on a page.

Set variable

Gives a variable a value; {{…}} expressions work. Can be kept for the next run.

Use it for: Counters, carrying data between runs.

Example · count = {{count|int}} + 1

Text / number operation

Extracts with regex, replaces, splits, joins, trims, changes case, converts to a number or calculates.

Use it for: Turning “$1,234.50” into 1234.5; pulling a code out of a text.

Generate random data

Generates a name, username, e-mail, phone number, password, date or number.

Use it for: Sign-up forms that need unique values.

Generate 2FA code (TOTP)

Generates the current 6-digit code from an authenticator key on your computer, with no outside service. Accepts a plain key or an otpauth:// link. If the code expires in under 4 seconds it waits for the next one. Your PC clock must be correct.

Use it for: Two-step verification on log-in.

Example · {{totp_key}} → code, then Type {{code}}

Save result

Writes a column to the run's results table, which you can export as CSV or JSON.

Use it for: Collecting one value from every profile.

Example · balance = {{balance}}

Write to log

Adds a line to the run log.

Use it for: Notes for debugging.

Google Sheets

Reads, writes or clears a Google Sheet with a service account added in Settings. Share the sheet with the account's e-mail as Editor.

Use it for: A shared list of accounts or results for a team.

Read from txt into variables

Reads a line from a txt file, splits it by a separator and puts the parts into variables. The line can be the next one (every profile gets a different line), a random one or a fixed number; used lines can be removed.

Use it for: One account per profile from an email:password list.

Example · [email protected]:secret → {{mail}}, {{pass}}

Save to txt

Appends text (variables included) to a txt file, or overwrites it.

Use it for: Lists of finished or failed accounts.

Example · {{mail}} - OK → done.txt

Read from Excel

Reads an Excel (.xlsx) or .csv file you drag in, browse to or give as a full path. The first row is the header and every column becomes a variable of the same name. Takes one row (the next one, so every profile gets a different row; a random one; or a fixed number), all rows as a list, or a single cell such as B2. The row number in the file comes back as {{excelSatirNo}}. Old .xls files are not supported.

Use it for: One account per profile from a sheet with mail and password columns.

Example · Columns mail | password → {{mail}}, {{password}}

Save to Excel

Adds a row of column name + value pairs to an Excel (.xlsx) or .csv file, writes a single cell, or rewrites the file. In an existing file the formatting, other sheets and formulas are kept; a missing file is created with a bold header row. Rows can also come from a list variable. Writes are queued, so many profiles can write to the same file at once. A file that is open in Excel can be read but not written.

Use it for: Collecting results as a table; marking a used row with D{{excelSatirNo}} = USED.

Example · mail = {{mail}}, status = OK → results.xlsx

JSON operation

Takes a field out of JSON text with a path such as data.items[0].name ([-1] is the last item), turns text into an object or list, or turns an object back into JSON text. A missing field can get a default value or fail the step.

Use it for: Reading a token or an ID from a page or a response.

Example · Source {{response}}, path data.token → {{token}}

Pick random from list

Picks one or a few random items from a list variable or from line-by-line text. The same item can be kept from being picked twice, and picked items can be removed from the source list.

Use it for: A random name, city or product; giving each profile a different value from a pool.

Example · List {{cities}}, 1 item → {{city}}

Profile note / tags

Changes the running profile's note (write, append or clear) and tags (add, remove, replace or clear). The change shows in the profile list, and later steps see it in {{profil.not}} and {{profil.etiketler}}.

Use it for: Marking a profile when an account is created; tagging failed profiles to filter them later.

Example · Note Account created: {{mail}}, add tag created

Logic

Conditions, loops, sub-flows and ending a run.

If / else

Runs one lane or the other depending on a condition: a variable comparison, an element that exists or is visible, a text or an address. Conditions can be combined with AND, OR and NOT.

Use it for: “If a CAPTCHA is shown, pause; otherwise continue.”

Loop

Repeats the steps inside it N times, once for every item in a list, while a condition holds, until it holds, or until an element disappears.

Use it for: Opening every link in a list; paging through results.

Run sub-flow

Runs another flow inside this one, with parameters, and can take values back from it.

Use it for: One shared “Log in” flow used everywhere.

Go to label

Jumps to a label in the same block.

Use it for: Retry loops; skipping a part.

Label

A named point that “Go to label” and error policies can jump to.

Use it for: Jump targets.

Break loop

Ends the loop it is in.

Use it for: Stopping once the item is found.

Next iteration

Skips the rest of this loop iteration.

Use it for: Skipping items that do not fit.

Return from sub-flow

Ends the sub-flow (or the flow) at this point.

Use it for: Leaving early when a condition is met.

End flow

Ends the flow as successful, failed or timed out, with a message.

Use it for: “Already logged in” → finish successfully.

Close profile and finish

Closes the profile and ends its RPA run.

Use it for: Closing cleanly when the work is done.

Note

A note inside the flow. It does nothing when the flow runs.

Use it for: Keeping long flows readable.

SMS

Phone verification through an SMS service (smsbower, hero-sms).

Get SMS number

Buys a phone number for a service and country from an SMS provider whose key you added in Settings, and stores the number and the activation ID in variables.

Use it for: Sign-ups that ask for a phone number.

Example · → {{phone}}, {{sms_id}}

Wait for SMS code

Waits for the code sent to that number. If no code arrives in time, it can cancel the activation.

Use it for: Entering the code the site sends.

Example · {{sms_id}} → sms_code

SMS action (cancel / resend / finish)

Cancels the activation, asks for another SMS, or marks it finished.

Use it for: Cleaning up after a successful or failed sign-up.

Settings

Open ⚙ Settings in RPA. These apply to all flows; a flow's own settings override them, and a single step can override its flow.

RPA settings: profile at the end, error policy, speed and randomness, accounts
Speed and randomness
Slow, normal, fast or very fast, plus how much each action's speed varies. Fast with middle randomness runs every click and keystroke at a slightly different speed. Enter your own range if the presets do not fit.
Seed (repeat code)
When on, the same seed reproduces the same behaviour; when off, every run is different.
Human behaviour
Typing speed and the chance of a typo that is corrected with Backspace. The mouse always moves along a curve.
Timeouts and error policies
One timeout for all steps, and what happens when a step fails or times out: stop, skip, retry, go to a label, or close the profile and finish. A flow's own settings override these, and a step can override its flow.
Profile when the flow ends
Keep the profile open or close it, separately for success and failure.
Screenshot on error
Saves a picture of the page when a step fails, so you can see later what went wrong.
Google Sheets accounts and SMS services
Service accounts for the Google Sheets step and API keys for smsbower and hero-sms. Both are stored encrypted on your computer.

Editor tools

Pick
Click an element in the profile's window and its selector is filled in.
Smart
Finds the real field or button inside the HTML you picked or pasted and suggests selectors on stable attributes. Each suggestion is checked on the open page; “unique” ones match exactly one element.
Test and Highlight
Test shows how many elements match. Highlight outlines the match in the browser for 2.5 seconds without changing the page.
Fallback selectors
Give an element several selectors; if the first one fails the next is tried. An element can also be found by its visible text.
Record
Watches your clicks, typing and scrolling in the profile and adds them as steps. What you type into password fields is not recorded.
Step by step and breakpoints
Run the flow one step at a time, or stop at marked steps (●), then continue from the Runs tab.
Validate
Lists likely problems, such as empty selectors or missing labels, before you run.
Templates, versions, import and export
Start from a template, go back to an earlier saved version, and move flows between computers as files.

Scheduler and history

Scheduler
Runs a flow on the profiles you choose at the times you set, for example every morning. Kryptix must be open at that time.
History
Keeps finished runs with their status, logs, results and error screenshots.

Variables

Anywhere in a flow, {{…}} is replaced with a value when the step runs. Values come from:

{{name}}Your own variables, set by steps such as Extract data or Set variable.
{{column}}Columns of the CSV or Excel file attached to the run.
{{profil.ad}}The current profile: name, tags, note.
{{proxy.ulke}}The profile's proxy: country, IP and similar.
{{kalici.x}}Values kept with “persist”, available in the next run too.
{{rastgele.eposta}}Random data created on the spot (name, e-mail, phone…).
{{count|int}}Filters after a pipe, for example convert to a whole number.

Troubleshooting

“Element not found” or “element not visible”

Press Test on the step with the profile open on the same page. If nothing matches, the page changed or the element is inside an iframe (add Enter iframe first). If it matches but is not visible, turn on Scroll into view if needed, or add Wait for element before the step.

The selector breaks every time the site updates

Class names like .x7f3a are generated and change. Use Smart to get a selector on name, aria-label or data-testid, or use Click by text for buttons and list options.

A CAPTCHA or “unusual traffic” page appears

The run pauses that profile and shows it in the Runs tab. Solve it in the profile's window and press Resume. If it happens often, slow the flow down, add waits, and check that the profile's proxy is clean.

How do I give every profile its own account?

Attach a CSV or Excel file in the Run window; each profile gets its own row and the columns become {{variables}}. A txt list read with Read from txt into variables works too.

The flow stops on a slow site

Raise the timeout in Settings (one value for all steps) or only on the slow step under Advanced, and set the timeout policy to Retry.

Can I see what the flow is doing?

Yes. Each profile runs in its own window with a cursor that shows where it clicks. Use Tile windows on screen in the Run window to watch several at once.

Something not covered here? Write to [email protected] with the flow exported from the editor (Export) and we will look at it.