Monitoring avatar

Monitoring

Try for free

No credit card required

Go to Store
Monitoring

Monitoring

apify/monitoring
Try for free

No credit card required

This actor monitors your actors' statuses, validates their datasets' data, and displays useful information in an interactive dashboard. And if something happens, you'll get notified via email or Slack.

Do you want to learn more about this Actor?

Get a demo

You can access the Monitoring programmatically from your own applications by using the Apify API. You can choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.

1{
2  "openapi": "3.0.1",
3  "info": {
4    "version": "0.0",
5    "x-build-id": "k6TruHzfACd7tEsIp"
6  },
7  "servers": [
8    {
9      "url": "https://api.apify.com/v2"
10    }
11  ],
12  "paths": {
13    "/acts/apify~monitoring/run-sync-get-dataset-items": {
14      "post": {
15        "operationId": "run-sync-get-dataset-items-apify-monitoring",
16        "x-openai-isConsequential": false,
17        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
18        "tags": [
19          "Run Actor"
20        ],
21        "requestBody": {
22          "required": true,
23          "content": {
24            "application/json": {
25              "schema": {
26                "$ref": "#/components/schemas/inputSchema"
27              }
28            }
29          }
30        },
31        "parameters": [
32          {
33            "name": "token",
34            "in": "query",
35            "required": true,
36            "schema": {
37              "type": "string"
38            },
39            "description": "Enter your Apify token here"
40          }
41        ],
42        "responses": {
43          "200": {
44            "description": "OK"
45          }
46        }
47      }
48    },
49    "/acts/apify~monitoring/runs": {
50      "post": {
51        "operationId": "runs-sync-apify-monitoring",
52        "x-openai-isConsequential": false,
53        "summary": "Executes an Actor and returns information about the initiated run in response.",
54        "tags": [
55          "Run Actor"
56        ],
57        "requestBody": {
58          "required": true,
59          "content": {
60            "application/json": {
61              "schema": {
62                "$ref": "#/components/schemas/inputSchema"
63              }
64            }
65          }
66        },
67        "parameters": [
68          {
69            "name": "token",
70            "in": "query",
71            "required": true,
72            "schema": {
73              "type": "string"
74            },
75            "description": "Enter your Apify token here"
76          }
77        ],
78        "responses": {
79          "200": {
80            "description": "OK",
81            "content": {
82              "application/json": {
83                "schema": {
84                  "$ref": "#/components/schemas/runsResponseSchema"
85                }
86              }
87            }
88          }
89        }
90      }
91    },
92    "/acts/apify~monitoring/run-sync": {
93      "post": {
94        "operationId": "run-sync-apify-monitoring",
95        "x-openai-isConsequential": false,
96        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
97        "tags": [
98          "Run Actor"
99        ],
100        "requestBody": {
101          "required": true,
102          "content": {
103            "application/json": {
104              "schema": {
105                "$ref": "#/components/schemas/inputSchema"
106              }
107            }
108          }
109        },
110        "parameters": [
111          {
112            "name": "token",
113            "in": "query",
114            "required": true,
115            "schema": {
116              "type": "string"
117            },
118            "description": "Enter your Apify token here"
119          }
120        ],
121        "responses": {
122          "200": {
123            "description": "OK"
124          }
125        }
126      }
127    }
128  },
129  "components": {
130    "schemas": {
131      "inputSchema": {
132        "type": "object",
133        "required": [
134          "projectName",
135          "mode"
136        ],
137        "properties": {
138          "mode": {
139            "title": "Mode",
140            "enum": [
141              "CREATE",
142              "UPDATE",
143              "DELETE"
144            ],
145            "type": "string",
146            "description": "Select mode of the monitoring. Configuration run modes are Create, update and delete. Monitoring configuration will be created and all connected tools will be turned ON when 'Create configuration' is chosen. Choose 'Update configuration' mode when you already created the configuration and you just want to change some details of existing monitoring configuration. Option 'Delete configuration' turns the monitoring off and removes all the created tools and storages connected to the monitoring configuration.",
147            "default": "CREATE"
148          },
149          "projectName": {
150            "title": "Monitoring suite name",
151            "pattern": "^([a-zA-Z0-9!\\-_.'()]{1,15})$",
152            "maxLength": 15,
153            "type": "string",
154            "description": "Name of your monitoring suite. It will be used in notifications and to identify related targets in the Apify dashboard."
155          },
156          "targetType": {
157            "title": "Type of target",
158            "enum": [
159              "ACTOR",
160              "TASK",
161              "NAMED_DATASET"
162            ],
163            "type": "string",
164            "description": "Only one type of target can be monitored by a single monitoring suite. If you want to watch more types, create more monitoring suites.",
165            "default": "ACTOR"
166          },
167          "targetPatternList": {
168            "title": "Target name patterns",
169            "type": "array",
170            "description": "Regular expressions that will be matched against selected actors / tasks or datasets under your Apify account. All matching targets will then be monitored by this monitoring suite. This is typically also the fastest way to select a single target. Just type its full name. Datasets are going to be automatically group by these patterns when dashboard statistics is counted for dataset target type, this can be overriden by setting the `Group targets by name patterns` option in the `Statistics dashboard` section.",
171            "default": [],
172            "items": {
173              "type": "string"
174            }
175          },
176          "targetList": {
177            "title": "Target IDs",
178            "type": "array",
179            "description": "If for whatever reason the Target name pattern option does not suit you, targets can also be specified by providing their IDs, as found in your Apify dashboard.",
180            "default": [],
181            "items": {
182              "type": "string"
183            }
184          },
185          "failuresCheck": {
186            "title": "Notify me whenever actor/task does not succeed",
187            "type": "boolean",
188            "description": "It's the simplest checker we have. As the name suggests, it works only for actors and tasks and it will check for runs that either FAILED, TIMED-OUT or ABORTED, so you'll never miss a problem again."
189          },
190          "groupNotifications": {
191            "title": "Group notifications",
192            "type": "boolean",
193            "description": "It groups notifications to one notification report when more notifications should come within 5 minutes range instead of sending each of them separately. This can be useful when there are more actor/task runs that would finish all at once or close each other."
194          },
195          "dashboardStatistics": {
196            "title": "Enable dashboard",
197            "type": "boolean",
198            "description": "Collects statistics and produces a link to a dashboard with visualisations."
199          },
200          "dashboardStatisticsFrequency": {
201            "title": "Update frequency",
202            "type": "string",
203            "description": "Choose how often should the dashboard statistics update. There are two basic options. Updating after each monitored run finishes or on a pre-set schedule. To update with every run, type: <code>per run</code>, <code>each run</code> or <code>every run</code>. To schedule updates, use plain English sentences such as <code>every day at 13:30</code> or <code>every Monday at noon</code> or <code>at 8pm every 1st day of the month</code>. For more examples see: <a href='https://github.com/darkeyedevelopers/natural-cron.js' target='_blank'>natural cron</a>.",
204            "default": "Every day at noon"
205          },
206          "dashboardGroupByList": {
207            "title": "Group targets by name patterns",
208            "type": "array",
209            "description": "Regular expressions or name patterns that will be used to group your selected targets by it's name. Named datasets are by default grouped by `targetPatternList`, setting this option will override it. All matched targets will then be displayed as one data line in the dashboard charts. For example if you use the same group of scraping actors for different countries as <code>actor-1-cz</code>, <code>actor-2-cz</code> and <code>actor-1-us</code>, <code>actor-2-us</code> your patterns can be <code>cz</code>, <code>us</code> and all your your dashboard will display 2 data lines - one for each state.",
210            "default": [],
211            "items": {
212              "type": "string"
213            }
214          },
215          "dashboardStatisticsNotifyOnUpdate": {
216            "title": "Notify me on dashboard updates",
217            "type": "boolean",
218            "description": "You will be notified every time when the dashboard is updated with new data."
219          },
220          "validationCheck": {
221            "title": "Enable schema validation",
222            "type": "boolean",
223            "description": "Datasets or default datasets will be validated using the provided validation options."
224          },
225          "validationCheckOptions": {
226            "title": "Validation options",
227            "type": "string",
228            "description": "The validation options specify your constraints. They are always an array of objects. This is to enable use of different schemas for different targets. See README for details."
229          },
230          "validationCheckFrequency": {
231            "title": "Validation frequency",
232            "type": "string",
233            "description": "Choose how often will the schema checks run. There are two basic options. Updating after each monitored run finishes or on a pre-set schedule. To update with every run, type: <code>per run</code>, <code>each run</code> or <code>every run</code>. To schedule updates, use plain English sentences such as <code>every day at 13:30</code> or <code>every Monday at noon</code> or <code>at 8pm every 1st day of the month</code>. For more examples see: <a href='https://github.com/darkeyedevelopers/natural-cron.js' target='_blank'>natural cron</a>.",
234            "default": "Per run"
235          },
236          "validationNotifyOnSuccess": {
237            "title": "Send me report even if validation passes",
238            "type": "boolean",
239            "description": "Validation checking report is going to be generated and sent via notification even if your data is correct."
240          },
241          "duplicationCheck": {
242            "title": "Enable duplicate items check",
243            "type": "boolean",
244            "description": "Datasets or default datasets will be checked for duplicates using the provided unique key."
245          },
246          "duplicationCheckKeys": {
247            "title": "Unique keys",
248            "type": "array",
249            "description": "You can define a list of unique keys for the duplication checking. Each unique key represents the dataset field that will be compared for uniqueness. You should use something that's guaranteed to be unique among items in your dataset. Like email for people, SKU for e-shop items, GUIDs and so on.",
250            "default": [],
251            "items": {
252              "type": "string"
253            }
254          },
255          "duplicationCheckAllowedDuplicates": {
256            "title": "Number of allowed duplicates",
257            "type": "integer",
258            "description": "Represents acceptable number of duplicated items occurring in the dataset. The duplication check will pass and the notification won't be sent If the number of duplicated items is lower than the allowed number of duplicates.",
259            "default": 0
260          },
261          "duplicationCheckFrequency": {
262            "title": "Check frequency",
263            "type": "string",
264            "description": "Choose how often will the check for duplicates run. There are two basic options. Updating after each monitored run finishes or on a pre-set schedule. To update with every run, type: <code>per run</code>, <code>each run</code> or <code>every run</code>. To schedule updates, use plain English sentences such as <code>every day at 13:30</code> or <code>every Monday at noon</code> or <code>at 8pm every 1st day of the month</code>. For more examples see: <a href='https://github.com/darkeyedevelopers/natural-cron.js' target='_blank'>natural cron</a>.",
265            "default": "Per run"
266          },
267          "duplicationNotifyOnSuccess": {
268            "title": "Send me report even if check passes",
269            "type": "boolean",
270            "description": "Duplicate checking report is going to be generated and sent via notification even if your data is correct."
271          },
272          "doNotSendEmail": {
273            "title": "Disable email notifications",
274            "type": "boolean",
275            "description": "If selected, email notification will not be sent."
276          },
277          "emailNotification": {
278            "title": "Custom address",
279            "type": "string",
280            "description": "Email address to override your account email address."
281          },
282          "emailSubject": {
283            "title": "Custom subject",
284            "type": "string",
285            "description": "Subject to override the generated subject of your notification email."
286          },
287          "slackNotification": {
288            "title": "Channel",
289            "type": "string",
290            "description": "Insert Slack channel name, such as <code>#notifications</code>"
291          },
292          "slackToken": {
293            "title": "Token",
294            "type": "string",
295            "description": "Insert application or user OAuth Access Token to the <a href='https://api.slack.com/authentication' target='_blank'>Slack API</a>. Ask your workspace admin for help if needed."
296          }
297        }
298      },
299      "runsResponseSchema": {
300        "type": "object",
301        "properties": {
302          "data": {
303            "type": "object",
304            "properties": {
305              "id": {
306                "type": "string"
307              },
308              "actId": {
309                "type": "string"
310              },
311              "userId": {
312                "type": "string"
313              },
314              "startedAt": {
315                "type": "string",
316                "format": "date-time",
317                "example": "2025-01-08T00:00:00.000Z"
318              },
319              "finishedAt": {
320                "type": "string",
321                "format": "date-time",
322                "example": "2025-01-08T00:00:00.000Z"
323              },
324              "status": {
325                "type": "string",
326                "example": "READY"
327              },
328              "meta": {
329                "type": "object",
330                "properties": {
331                  "origin": {
332                    "type": "string",
333                    "example": "API"
334                  },
335                  "userAgent": {
336                    "type": "string"
337                  }
338                }
339              },
340              "stats": {
341                "type": "object",
342                "properties": {
343                  "inputBodyLen": {
344                    "type": "integer",
345                    "example": 2000
346                  },
347                  "rebootCount": {
348                    "type": "integer",
349                    "example": 0
350                  },
351                  "restartCount": {
352                    "type": "integer",
353                    "example": 0
354                  },
355                  "resurrectCount": {
356                    "type": "integer",
357                    "example": 0
358                  },
359                  "computeUnits": {
360                    "type": "integer",
361                    "example": 0
362                  }
363                }
364              },
365              "options": {
366                "type": "object",
367                "properties": {
368                  "build": {
369                    "type": "string",
370                    "example": "latest"
371                  },
372                  "timeoutSecs": {
373                    "type": "integer",
374                    "example": 300
375                  },
376                  "memoryMbytes": {
377                    "type": "integer",
378                    "example": 1024
379                  },
380                  "diskMbytes": {
381                    "type": "integer",
382                    "example": 2048
383                  }
384                }
385              },
386              "buildId": {
387                "type": "string"
388              },
389              "defaultKeyValueStoreId": {
390                "type": "string"
391              },
392              "defaultDatasetId": {
393                "type": "string"
394              },
395              "defaultRequestQueueId": {
396                "type": "string"
397              },
398              "buildNumber": {
399                "type": "string",
400                "example": "1.0.0"
401              },
402              "containerUrl": {
403                "type": "string"
404              },
405              "usage": {
406                "type": "object",
407                "properties": {
408                  "ACTOR_COMPUTE_UNITS": {
409                    "type": "integer",
410                    "example": 0
411                  },
412                  "DATASET_READS": {
413                    "type": "integer",
414                    "example": 0
415                  },
416                  "DATASET_WRITES": {
417                    "type": "integer",
418                    "example": 0
419                  },
420                  "KEY_VALUE_STORE_READS": {
421                    "type": "integer",
422                    "example": 0
423                  },
424                  "KEY_VALUE_STORE_WRITES": {
425                    "type": "integer",
426                    "example": 1
427                  },
428                  "KEY_VALUE_STORE_LISTS": {
429                    "type": "integer",
430                    "example": 0
431                  },
432                  "REQUEST_QUEUE_READS": {
433                    "type": "integer",
434                    "example": 0
435                  },
436                  "REQUEST_QUEUE_WRITES": {
437                    "type": "integer",
438                    "example": 0
439                  },
440                  "DATA_TRANSFER_INTERNAL_GBYTES": {
441                    "type": "integer",
442                    "example": 0
443                  },
444                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
445                    "type": "integer",
446                    "example": 0
447                  },
448                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
449                    "type": "integer",
450                    "example": 0
451                  },
452                  "PROXY_SERPS": {
453                    "type": "integer",
454                    "example": 0
455                  }
456                }
457              },
458              "usageTotalUsd": {
459                "type": "number",
460                "example": 0.00005
461              },
462              "usageUsd": {
463                "type": "object",
464                "properties": {
465                  "ACTOR_COMPUTE_UNITS": {
466                    "type": "integer",
467                    "example": 0
468                  },
469                  "DATASET_READS": {
470                    "type": "integer",
471                    "example": 0
472                  },
473                  "DATASET_WRITES": {
474                    "type": "integer",
475                    "example": 0
476                  },
477                  "KEY_VALUE_STORE_READS": {
478                    "type": "integer",
479                    "example": 0
480                  },
481                  "KEY_VALUE_STORE_WRITES": {
482                    "type": "number",
483                    "example": 0.00005
484                  },
485                  "KEY_VALUE_STORE_LISTS": {
486                    "type": "integer",
487                    "example": 0
488                  },
489                  "REQUEST_QUEUE_READS": {
490                    "type": "integer",
491                    "example": 0
492                  },
493                  "REQUEST_QUEUE_WRITES": {
494                    "type": "integer",
495                    "example": 0
496                  },
497                  "DATA_TRANSFER_INTERNAL_GBYTES": {
498                    "type": "integer",
499                    "example": 0
500                  },
501                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
502                    "type": "integer",
503                    "example": 0
504                  },
505                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
506                    "type": "integer",
507                    "example": 0
508                  },
509                  "PROXY_SERPS": {
510                    "type": "integer",
511                    "example": 0
512                  }
513                }
514              }
515            }
516          }
517        }
518      }
519    }
520  }
521}

Monitoring OpenAPI definition

OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.

OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.

By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.

You can download the OpenAPI definitions for Monitoring from the options below:

If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.

You can also check out our other API clients:

Developer
Maintained by Apify

Actor Metrics

  • 2 monthly users

  • 13 stars

  • 33% runs succeeded

  • Created in Jul 2020

  • Modified 7 months ago

Categories