FAQ
General
Q: What is AutoJob?
A: AutoJob is a mobile automation platform (iOS & Android) that lets you create scheduled jobs with multi-step workflows running on a backend server. You build the workflow in the app; the cloud executes it on a cron schedule; and results are delivered back via push notifications, email, and an in-app history log.
Q: How does scheduling work?
A: Each job uses a cron expression (standard 5-field format) and a timezone offset in minutes. The backend calculates the next UTC run time, applies the offset, and schedules execution. Free-tier jobs receive an additional 30-second startup delay. Minimum interval between runs: 60 minutes (Free), 15 minutes (Basic), 5 minutes (Pro).
Q: Do I need to keep the app open for jobs to run?
A: No. Jobs run entirely on the backend server. You only need the app to create, edit, test, or monitor them.
Getting Started
Q: How do I create my first job?
A: Tap the add button, give the job a title, enter a cron expression, set the timezone offset, and toggle it enabled. Then add steps in the order you want them to execute. Save the job and it will be scheduled automatically.
Q: How do I test a job before scheduling it?
A: Open the job details and tap Test Run. The job executes immediately and you see the latest result, including elapsed time, output, and any errors. Testing does not affect the cron schedule.
Q: How do I view job history?
A: Each job has a History tab showing past runs. Free users see the last 10 runs; Basic and Pro users see the last 30. Each entry shows the result status, elapsed time, and output data (truncated to 8192 characters).
Q: What are sample jobs?
A: When you subscribe (or on first install), the app automatically creates sample jobs to demonstrate features. Free users get “Sample WebRequest + Script” showing a login POST, authenticated GETs, a JS transform step, and a formatted result. Basic/Pro users get “Sample WebSocket + RegEx” showing a WebSocket send/receive and RegEx extraction.
Step Types
Q: What step types are available?
A: There are six step types: Web Request, WebSocket, RegEx, Send Email, Script (JavaScript), and Job Result.
Q: Which step types require a subscription?
A: Free users can use Web Request, Script, and Job Result. Basic and Pro users unlock all six, including Send Email, WebSocket, and RegEx.
Web Request
Q: How does the Web Request step work?
A: It performs an HTTP request (GET, POST, PUT, DELETE) to a URL you specify. You can set custom headers, query parameters, and a body. The response is stored as JSON or Text for later steps to reference.
Q: What body types are supported?
A: None, JSON (application/json), Text (text/plain), FormData (multipart/form-data), and UrlEncoded (application/x-www-form-urlencoded).
Q: How do I pass data from one request to the next?
A: Use template placeholders in headers, URL, query params, form data, or body. Example: set an Authorization header to Bearer %login.json.accessToken% to pass a token from a previous “Login” step.
Q: What are Success Codes?
A: An array of HTTP status codes the step should accept as successful. Default is [200]. If the response status code is not in this list, the step fails. Error response bodies are truncated to 1024 characters in the error message.
Q: What properties does a Web Request step set?
A: statusCode, responseTime (ms), and responseSize (bytes). You can reference these in later steps with %stepname.prop.statusCode%.
WebSocket
Q: How does the WebSocket step work?
A: It opens a WebSocket connection, optionally sends a text message, optionally waits to receive a text message, and optionally closes the connection on exit.
Q: What settings does it have?
A: Send (send body as text), Receive (wait for a response), ReceiveTimeout (seconds, max 30), CloseOnExit, Body, and ResultType (Json or Text).
Q: What happens on timeout?
A: If receiving and the timeout is reached, the step fails with WebSocketError: [Timeout] and the socket is closed.
Q: What properties does it set?
A: responseSize (bytes received) and responseTime (ms).
RegEx
Q: How does the RegEx step work?
A: It runs a regular expression against the text or JSON output of a previous step you name in StepToMatch.
Q: What are the matching rules?
A: The regex is case-insensitive, single-line, compiled, with a 1-second execution timeout. HTML entities are decoded before matching. Only named capture groups are included in results. Up to 10 matches are returned. Maximum regex length is 2048 characters.
Q: What is the output format?
A: JSON:
{
"matches": [
{
"groupName": "value",
"0": "full match"
}
]
}
If your regex has no named groups, group 0 (the full match) is still included.
Q: What is FailOnResult?
A: A setting that controls whether the step should fail based on match results:
- Match — fail if any matches are found.
- NoMatch — fail if zero matches are found.
- None — never fail based on match count.
Q: What properties does it set?
A: responseSize (number of matches) and responseTime (ms).
Script (JavaScript)
Q: How does the Script step work?
A: You write a userCode(steps) function. The engine receives all previous step outputs in the steps object, runs your code, and stores the returned object as JSON output.
Q: What does the steps object look like?
A: Keys are previous step names in lowercase. For a JSON step:
steps['stepname'] = {
json: {
/* parsed JSON */
},
prop: {
responseSize: ...,
responseTime: ...,
statusCode: ...
}
}
For a Text step:
steps['stepname'] = {
text: "raw string",
prop: {
responseSize: ...,
responseTime: ...
}
}
Q: What should my function return?
A: Any JSON-serializable object. A common pattern is:
function userCode(steps) {
return {
exitCode: 0,
data: steps['getapiname'].json.firstName
+ ' '
+ steps['getapiname'].json.lastName
}
}
Q: Is there a timeout?
A: Yes. Scripts share a job-wide timeout pool (from your subscription rules). After each script step runs, its execution time is deducted from the remaining pool. If a script exceeds the remaining time, it is interrupted with ScriptError: [Timeout]. See Subscriptions & Limits below for pool sizes by tier.
Q: Can I throw errors?
A: Yes. throw new Error('Something went wrong') will fail the step with ScriptError: [Something went wrong].
Send Email
Q: How does the Send Email step work?
A: It sends an email using the parsed Body, To, Cc, and Subject fields. All fields support the %stepname...% template syntax. To and Cc support comma-separated addresses.
Q: Can I send HTML emails?
A: Yes. Enable the IsHtml flag.
Q: Are there limits?
A: The number of email addresses in To + Cc is limited by your subscription rules. See the limits table below.
Job Result
Q: How does the Job Result step work?
A: It parses its Body through the template substitution engine, producing the final human-readable result of the job. This is what you see in history and push notifications.
Q: Can it send email?
A: Yes. If IsNotifyByEmail is enabled, it sends the parsed body to your registered email address with the subject Job [{JobTitle}] finished.
Q: Does it run if a previous step failed?
A: No. If any earlier step throws an exception, the job stops and the Job Result step does not execute.
Templates & Variables
Q: How do I reference output from a previous step?
A: Use the %...% syntax. Step names are matched case-insensitively.
Available formats:
%stepname.json.path.to.property%— extract a JSON property using SelectTokens. Supports array indexing ([0]), wildcard flattening ([*]), and.countsuffix (counts array elements).%stepname.text%— insert the raw text output of a step.%stepname.prop.propertyName%— insert a step property such asstatusCode,responseTime, orresponseSize.
Examples from the sample jobs:
%login.prop.statusCode%— HTTP status code of the Login step%getapiname.json.firstName%— JSON propertyfirstName%getapiname.json.items.count%— count of items array%getapiname.json.items[*].name%— all item names, comma-separated%getapitext.text%— raw text response%script.json.data%— thedatafield returned by a Script step
Subscriptions & Limits
Q: What are the subscription tiers?
A: Free, Basic (autojob.sub.basic), and Pro (autojob.sub.pro).
Q: What limits does each tier enforce?
A:
| Limit | Free | Basic | Pro |
|---|---|---|---|
| Max jobs | 1 | 10 | 30 |
| Max steps per job | 5 | 10 | 30 |
| Min cron interval | 60 min | 15 min | 5 min |
| HTTP request timeout | 10 s | 30 s | 30 s |
| Job timeout | 30 s | 60 s | 3 min |
| Script timeout pool | 1 s | 2 s | 3 s |
| Max email recipients (To + Cc) | — | 3 | 10 |
| Max response buffer | 100 KB | 1 MB | 10 MB |
| Run history kept | 10 | 30 | 30 |
Send Email requires a paid subscription — the Free tier cannot use it.
Q: What features are locked behind subscriptions?
A: Free users get WebRequest, Script, and JobResult. Basic and Pro unlock SendEmail, WebSocket, and RegEx steps, plus higher limits on jobs, steps, history, and timeouts.
Troubleshooting
Q: My job shows “Failed”. How do I find out why?
A: Open the job and check the Latest Result and History. The error message includes the failing step name and the reason (HTTP status mismatch, RegEx timeout, script error, WebSocket timeout, etc.).
Q: What does “Step canceled” mean?
A: The step was interrupted because the overall job timeout was reached.
Q: What does “RegExError: [Timeout]” mean?
A: Your regular expression took longer than 1 second to execute. Simplify the pattern or reduce the input size.
Q: What does “RegExError: [Match]” or “[NoMatch]” mean?
A: These come from the FailOnResult setting. If you set FailOnResult = Match and matches were found, the step fails. If you set NoMatch and no matches were found, it fails.
Q: Why is my script result truncated?
A: Job and step results are stored up to 8192 characters. Anything beyond that is truncated in the database log.
Q: Why did my WebSocket step fail immediately?
A: Check that the URL is valid, the server supports WebSockets, and ReceiveTimeout is not set to 0 unless you do not intend to receive. A 0-second receive timeout with Receive=true will likely time out instantly.
Q: Can I disable a step without deleting it?
A: Yes. Each step has an Enabled toggle. Disabled steps are skipped during execution.
Q: What happens if I rename a step?
A: Step names are referenced case-insensitively by templates. If you rename a step, update any %stepname...% placeholders in subsequent steps to match the new name.
Sample Job Walkthroughs
Free Sample: “Sample WebRequest + Script”
- Login — WebRequest POST form-data to
/loginwithLogin=user1@email.comandPassword=password1. - GetApiName — WebRequest GET to
/namewithAuthorization: Bearer %login.json.accessToken%. - GetApiText — WebRequest GET to
/textwith the same Bearer token, ResultType=Text. - Script — JavaScript that combines
firstName+lastName+ current date into adatafield. - Result — JobResult that formats a summary using all previous step outputs.
Paid Sample: “Sample WebSocket + RegEx”
- WebSocket — Connects to sample WS URL, sends
text regex-string text, receives response, ResultType=Text. - RegEx — Runs
(?regex-string)against the WebSocket step output, FailOnResult=NoMatch. - Result — JobResult showing the received text, match count, and matched groups.