Skip to main content

Actor input schema specification

Learn how to define and easily validate a schema for your Actor's input with code examples. Provide an autogenerated input UI for your Actor's users.


An Actor's input schema defines the input that the Actor accepts and the UI components used for input in Apify Console. Using input schema, you can provide an easy-to-use UI for your Actor's users and also ensure that the input provided is valid.

Input schema can be embedded as an object in the .actor/actor.json file under the input field. Alternatively, you can store a path to a JSON file in that field. If the input field or .actor/actor.json are omitted, the input schema from .actor/INPUT_SCHEMA.json is used. In the absence of that file, the INPUT_SCHEMA.json file stored in the Actor's root directory is used. The file's maximum size is 100 kB. If the input schema is provided, then input is always validated to fulfill the schema when an Actor is being started (via API or from Apify Console).

You can also use our visual input schema editor to guide you through creation of the INPUT_SCHEMA.json file.

If you need to validate your input schemas, you can use the apify vis command in the Apify CLI.

Example

Imagine you are building a simple crawler whose inputs are an array of start URLs and a JavaScript function that will be executed at each page the crawler visits. Its input schema will look like this:

{
"title": "Cheerio Crawler input",
"description": "To update crawler to another site, you need to change startUrls and pageFunction options!",
"type": "object",
"schemaVersion": 1,
"properties": {
"startUrls": {
"title": "Start URLs",
"type": "array",
"description": "URLs to start with",
"prefill": [
{ "url": "http://example.com" },
{ "url": "http://example.com/some-path" }
],
"editor": "requestListSources"
},
"pageFunction": {
"title": "Page function",
"type": "string",
"description": "Function executed for each request",
"prefill": "async () => { return $('title').text(); }",
"editor": "javascript"
}
},
"required": ["startUrls", "pageFunction"]
}

And generated the input UI will be:

Apify Actor input schema example

If you switch the input to the JSON display using the toggle, then you will see the entered input stringified to JSON, as it will be passed to the Actor:

{
"startUrls": [
{
"url": "http://example.com"
},
{
"url": "http://example.com/some-path"
}
],
"pageFunction": "async () => { return $('title').text(); }"
}

Structure

The input schema is a JSON file named INPUT_SCHEMA.json, placed in the root directory of an Actor with the following structure:

{
"title": "Cheerio Crawler input",
"type": "object",
"schemaVersion": 1,
"properties": { /* define input fields here */ },
"required": []
}
PropertyTypeRequiredDescription
titleStringYesAny text describing your input schema.
descriptionStringNoHelp text for the input that will be
displayed above the UI fields.
typeStringYesThis is fixed and must be set
to string object.
schemaVersionIntegerYesThe version of the input schema
specification against which
your schema is written.
Currently, only version 1 is out.
propertiesObjectYesThis is an object mapping each field key
to its specification.
required[String]NoAn array of field keys that are required.

Even though the structure of the Actor input schema is similar to JSON schema, there are a few important differences. Therefore, we cannot guarantee that JSON schema tooling will work correctly on input schema documents. For precise technical understanding of the matter, feel free to browse the code of the @apify/input_schema package.

Fields

Each field of your input is described under its key in inputSchema.properties object. The field might have integer, string, array, object or boolean type and its specification contains the following properties:

PropertyValueRequiredDescription
typeOne of
string,
array,
object,
boolean,
integer
YesAllowed type for the input value.
Cannot be mixed.
titleStringYesTitle of the field in UI.
descriptionStringYesDescription of the field that will be
displayed as help text in Actor input UI.
defaultMust match
type property.
NoDefault value that will be
used when no value is provided.
prefillMust match
type property.
NoValue that will be prefilled
in the Actor input interface.
Only the boolean type doesn't
support prefill property.
exampleMust match
type property.
NoSample value of this field
for the Actor to be displayed when
Actor is published in Apify Store.
sectionCaptionStringNoIf this property is set,
then all fields following this field
(this field included) will be separated
into a collapsible section
with the value set as its caption.
The section ends at the last field
or the next field which has the
sectionCaption property set.
sectionDescriptionStringNoIf the sectionCaption property is set,
then you can use this property to
provide additional description to the section.
The description will be visible right under
the caption when the section is open.

Prefill vs. default vs. required

Here is a rule of thumb for whether an input field should have a prefill, default, or be required:

  • Prefill - Use for fields that don't have a reasonable default. The provided value is prefilled for the user to show them an example of using the field and to make it easy to test the Actor (e.g., search keyword, start URLs). In other words, this field is only used in the user interface but does not affect the Actor functionality and API.
  • Required - Use for fields that don't have a reasonable default and MUST be entered by the user (e.g., API token, password).
  • Default - Use for fields that MUST be set for the Actor run to some value, but where you don't need the user to change the default behavior (e.g., max pages to crawl, proxy settings). If the user omits the value when starting the Actor via any means (API, CLI, scheduler, or user interface), the platform automatically passes the Actor this default value.
  • No particular setting - Use for purely optional fields where it makes no sense to prefill any value (e.g., flags like debug mode or download files).

In summary, you can use each option separately or use a combination of Prefill + Required, but the combinations Prefill + Default or Default + Required don't make sense to use.

Additional properties

In addition to the properties listed above, most of the types support also additional properties defining, for example, the UI input editor.

String

Example of a code input:

{
"title": "Page function",
"type": "string",
"description": "Function executed for each request",
"editor": "javascript",
"prefill": "async () => { return $('title').text(); }"
}

Rendered input:

Apify Actor input schema page function

Example of country selection using a select input:

{
"title": "Country",
"type": "string",
"description": "Select your country",
"editor": "select",
"default": "us",
"enum": ["us", "de", "fr"],
"enumTitles": ["USA", "Germany", "France"]
}

Rendered input:

Apify Actor input schema - country input

Properties:

PropertyValueRequiredDescription
editorOne of
textfield,
textarea,
javascript,
python,
select,
datepicker,
hidden
YesVisual editor used for
the input field.
patternStringNoRegular expression that will be
used to validate the input.
If validation fails,
the Actor will not run.
minLengthIntegerNoMinimum length of the string.
maxLengthIntegerNoMaximum length of the string.
enum[String]Required if
editor
is select
Using this field, you can limit values
to the given array of strings.
Input will be displayed as select box.
enumTitles[String]NoTitles for the enum keys described.
nullableBooleanNoSpecifies whether null
is an allowed value.
isSecretBooleanNoSpecifies whether the input field
will be stored encrypted.
Only available
with textfield and textarea editors.

When using escape characters \ for the regular expression in the pattern field, be sure to escape them to avoid invalid JSON issues. For example, the regular expression https:\/\/(www\.)?apify\.com\/.+ would become https:\\/\\/(www\\.)?apify\\.com\\/.+.

Boolean

Beware that the boolean input type doesn't support the prefill property, since there is no way to display the pre-filled value in the user interface.

Example options with group caption:

{
"verboseLog": {
"title": "Verbose log",
"type": "boolean",
"description": "Debug messages will be included in the log.",
"default": true,
"groupCaption": "Options",
"groupDescription": "Various options for this Actor"
},
"lightspeed": {
"title": "Lightspeed",
"type": "boolean",
"description": "If checked then actors runs at the
speed of light.",
"default": true
}
}

Rendered input:

Apify Actor input schema options

Properties:

PropertyValueRequiredDescription
editorOne of
checkbox,
hidden
NoVisual editor used for the input field.
groupCaptionStringNoIf you want to group
multiple checkboxes together,
add this option to the first
of the group.
groupDescriptionStringNoDescription displayed as help text
displayed of group title.
nullableBooleanNoSpecifies whether null is
an allowed value.

Integer

Example:

{
"title": "Memory",
"type": "integer",
"description": "Select memory in megabytes",
"default": 64,
"maximum": 1024,
"unit": "MB"
}

Rendered input:

Apify Actor input schema memory

Properties:

PropertyValueRequiredDescription
editorOne of
number,
hidden
NoVisual editor used for input field.
maximumIntegerNoMaximum allowed value.
minimumIntegerNoMinimum allowed value.
unitStringNoUnit displayed next to the field in UI,
for example second, MB, etc.
nullableBooleanNoSpecifies whether null is an allowed value.

Object

Example of proxy configuration:

{
"title": "Proxy configuration",
"type": "object",
"description": "Select proxies to be used by your crawler.",
"prefill": { "useApifyProxy": true },
"editor": "proxy"
}

Rendered input:

Apify Actor input schema proxy

The object where the proxy configuration is stored has the following structure:

{
// Indicates whether Apify Proxy was selected.
"useApifyProxy": Boolean,

// Array of Apify Proxy groups. Is missing or null if
// Apify Proxy's automatic mode was selected
// or if proxies are not used.
"apifyProxyGroups": String[],

// Array of custom proxy URLs.
// Is missing or null if custom proxies were not used.
"proxyUrls": String[],
}

Example of a blackbox object:

{
"title": "User object",
"type": "object",
"description": "Enter object representing user",
"prefill": {
"name": "John Doe",
"email": "janedoe@gmail.com"
},
"editor": "json"
}

Rendered input:

Apify Actor input schema user object

Properties:

PropertyValueRequiredDescription
editorOne of
json,
proxy,
hidden
YesUI editor used for input.
patternKeyStringNoRegular expression that will be used
to validate the keys of the object.
patternValueStringNoRegular expression that will be used
to validate the values of object.
maxPropertiesIntegerNoMaximum number of properties
the object can have.
minPropertiesIntegerNoMinimum number of properties
the object can have.
nullableBooleanNoSpecifies whether null is
an allowed value.

Array

Example of request list sources configuration:

{
"title": "Start URLs",
"type": "array",
"description": "URLs to start with",
"prefill": [{ "url": "http://example.com" }],
"editor": "requestListSources"
}

Rendered input:

Apify Actor input schema start urls array

Example of an array:

{
"title": "Colors",
"type": "array",
"description": "Enter colors you know",
"prefill": ["Red", "White"],
"editor": "json"
}

Rendered input:

Apify Actor input schema colors array

Properties:

PropertyValueRequiredDescription
editorOne of
json,
requestListSources,
pseudoUrls,
globs,
keyValue,
stringList,
select,
hidden
YesUI editor used for input.
placeholderKeyStringNoPlaceholder displayed for
key field when no value is specified.
Works only with keyValue editor.
placeholderValueStringNoPlaceholder displayed in value field
when no value is provided.
Works only with keyValue and
stringList editors.
patternKeyStringNoRegular expression that
will be used to validate
the keys of items in the array.
Works only with keyValue
editor.
patternValueStringNoRegular expression that
will be used to validate the values
of items in the array.
Works only with keyValue and
stringList editors.
maxItemsIntegerNoMaximum number of items
the array can contain.
minItemsIntegerNoMinimum number of items
the array can contain.
uniqueItemsBooleanNoSpecifies whether the array
should contain only unique values.
nullableBooleanNoSpecifies whether null is
an allowed value.
itemsobjectNoSpecifies format of the items of the array, useful mainly for multiselect (see below)

Usage of this field is based on the selected editor:

  • requestListSources - value from this field can be used as input of RequestList class from Crawlee.
  • pseudoUrls - is intended to be used with a combination of the PseudoUrl class and the enqueueLinks() function from Crawlee.

Editor type requestListSources supports input in formats defined by the sources property of RequestListOptions.

Editor type globs maps to the Crawlee's GlobInput used by the UrlPatterObject.

Editor type select allows the user to pick items from a select, providing multiple choices. Please check this example of how to define the multiselect field:

{
"title": "Multiselect field",
"description": "My multiselect field",
"type": "array",
"editor": "select",
"items": {
"type": "string",
"enum": ["value1", "value2", "value3"],
"enumTitles": ["Label of value1", "Label of value2", "Label of value3"]
}
}

To correctly define options for multiselect, you need to define the items property and then provide values and (optionally) labels in enum and enumTitles properties.