Website Backup avatar

Website Backup

Try for free

No credit card required

Go to Store
Website Backup

Website Backup

mhamas/website-backup
Try for free

No credit card required

Enables to create a backup of any website by crawling it, so that you don’t lose any content by accident. Ideal e.g. for your personal or company blog.

You can access the Website Backup 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": "bqVtTvcInD6YqFUBw"
6  },
7  "servers": [
8    {
9      "url": "https://api.apify.com/v2"
10    }
11  ],
12  "paths": {
13    "/acts/mhamas~website-backup/run-sync-get-dataset-items": {
14      "post": {
15        "operationId": "run-sync-get-dataset-items-mhamas-website-backup",
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/mhamas~website-backup/runs": {
50      "post": {
51        "operationId": "runs-sync-mhamas-website-backup",
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/mhamas~website-backup/run-sync": {
93      "post": {
94        "operationId": "run-sync-mhamas-website-backup",
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        "properties": {
134          "startURLs": {
135            "title": "Start URLs",
136            "type": "array",
137            "description": "List of URL entry points. Each entry is an object of type <code>{'url': 'http://www.example.com'}</code>",
138            "items": {
139              "type": "object",
140              "required": [
141                "url"
142              ],
143              "properties": {
144                "url": {
145                  "type": "string",
146                  "title": "URL of a web page",
147                  "format": "uri"
148                }
149              }
150            }
151          },
152          "linkSelector": {
153            "title": "Link selector",
154            "type": "string",
155            "description": "CSS selector matching elements with 'href' attributes that should be enqueued. To enqueue urls from <code><div class=\"my-class\" href=...></code> tags, you would enter <strong>div.my-class</strong>. Leave empty to ignore all links."
156          },
157          "maxRequestsPerCrawl": {
158            "title": "Max pages per run",
159            "minimum": 0,
160            "type": "integer",
161            "description": "The maximum number of pages that the scraper will load. The scraper will stop when this limit is reached. It's always a good idea to set this limit in order to prevent excess platform usage for misconfigured scrapers. Note that the actual number of pages loaded might be slightly higher than this value.<br><br>If set to <code>0</code>, there is no limit.",
162            "default": 10
163          },
164          "maxCrawlingDepth": {
165            "title": "Max crawling depth",
166            "minimum": 0,
167            "type": "integer",
168            "description": "Defines how many links away from the StartURLs will the scraper descend. 0 means unlimited.",
169            "default": 0
170          },
171          "maxConcurrency": {
172            "title": "Max concurrency",
173            "minimum": 1,
174            "type": "integer",
175            "description": "Defines how many pages can be processed by the scraper in parallel. The scraper automatically increases and decreases concurrency based on available system resources. Use this option to set a hard limit.",
176            "default": 50
177          },
178          "customKeyValueStore": {
179            "title": "Custom key value store",
180            "type": "string",
181            "description": "Use custom named key value store for saving results. If the key value store with this name doesn't yet exist, it's created. The snapshots of the pages will be saved in the key value store.",
182            "default": ""
183          },
184          "customDataset": {
185            "title": "Custom dataset",
186            "type": "string",
187            "description": "Use custom named dataset for saving metadata. If the dataset with this name doesn't yet exist, it's created. The metadata about the snapshots of the pages will be saves in the dataset.",
188            "default": ""
189          },
190          "timeoutForSingleUrlInSeconds": {
191            "title": "Timeout (in seconds) for backuping a single URL.",
192            "minimum": 1,
193            "type": "integer",
194            "description": "Timeout in seconds for doing a backup of a single URL. Try to increase this timeout in case you see an error <code> Error: handlePageFunction timed out after X seconds. </code>.",
195            "default": 120
196          },
197          "navigationTimeoutInSeconds": {
198            "title": "Timeout (in seconds) in which page navigation needs to finish",
199            "minimum": 1,
200            "type": "integer",
201            "description": "Timeout in seconds in which the navigation needs to finish. Try to increase this if you see an error <code>Navigation timeout of XXX ms exceeded </code>",
202            "default": 120
203          },
204          "searchParamsToIgnore": {
205            "title": "URL search parameters to ignore",
206            "type": "array",
207            "description": "Names of URL search parameters (such as 'source', 'sourceid', etc.) that should be ignored in the URLs when crawling.",
208            "default": [],
209            "items": {
210              "type": "string"
211            }
212          },
213          "sameOrigin": {
214            "title": "Only consider pages under the same domain as one of the provided URLs.",
215            "type": "boolean",
216            "description": "Only backup URLs with the same origin as any of the start URL origins. E.g. when turned on for a single start URL <code>https://blog.apify.com</code>, only links with prefix <code>https://blog.apify.com</code> will be backed up recursively.",
217            "default": true
218          },
219          "proxyConfiguration": {
220            "title": "Proxy configuration",
221            "type": "object",
222            "description": "Choose to use no proxy, Apify Proxy, or provide custom proxy URLs.",
223            "default": {}
224          }
225        }
226      },
227      "runsResponseSchema": {
228        "type": "object",
229        "properties": {
230          "data": {
231            "type": "object",
232            "properties": {
233              "id": {
234                "type": "string"
235              },
236              "actId": {
237                "type": "string"
238              },
239              "userId": {
240                "type": "string"
241              },
242              "startedAt": {
243                "type": "string",
244                "format": "date-time",
245                "example": "2025-01-08T00:00:00.000Z"
246              },
247              "finishedAt": {
248                "type": "string",
249                "format": "date-time",
250                "example": "2025-01-08T00:00:00.000Z"
251              },
252              "status": {
253                "type": "string",
254                "example": "READY"
255              },
256              "meta": {
257                "type": "object",
258                "properties": {
259                  "origin": {
260                    "type": "string",
261                    "example": "API"
262                  },
263                  "userAgent": {
264                    "type": "string"
265                  }
266                }
267              },
268              "stats": {
269                "type": "object",
270                "properties": {
271                  "inputBodyLen": {
272                    "type": "integer",
273                    "example": 2000
274                  },
275                  "rebootCount": {
276                    "type": "integer",
277                    "example": 0
278                  },
279                  "restartCount": {
280                    "type": "integer",
281                    "example": 0
282                  },
283                  "resurrectCount": {
284                    "type": "integer",
285                    "example": 0
286                  },
287                  "computeUnits": {
288                    "type": "integer",
289                    "example": 0
290                  }
291                }
292              },
293              "options": {
294                "type": "object",
295                "properties": {
296                  "build": {
297                    "type": "string",
298                    "example": "latest"
299                  },
300                  "timeoutSecs": {
301                    "type": "integer",
302                    "example": 300
303                  },
304                  "memoryMbytes": {
305                    "type": "integer",
306                    "example": 1024
307                  },
308                  "diskMbytes": {
309                    "type": "integer",
310                    "example": 2048
311                  }
312                }
313              },
314              "buildId": {
315                "type": "string"
316              },
317              "defaultKeyValueStoreId": {
318                "type": "string"
319              },
320              "defaultDatasetId": {
321                "type": "string"
322              },
323              "defaultRequestQueueId": {
324                "type": "string"
325              },
326              "buildNumber": {
327                "type": "string",
328                "example": "1.0.0"
329              },
330              "containerUrl": {
331                "type": "string"
332              },
333              "usage": {
334                "type": "object",
335                "properties": {
336                  "ACTOR_COMPUTE_UNITS": {
337                    "type": "integer",
338                    "example": 0
339                  },
340                  "DATASET_READS": {
341                    "type": "integer",
342                    "example": 0
343                  },
344                  "DATASET_WRITES": {
345                    "type": "integer",
346                    "example": 0
347                  },
348                  "KEY_VALUE_STORE_READS": {
349                    "type": "integer",
350                    "example": 0
351                  },
352                  "KEY_VALUE_STORE_WRITES": {
353                    "type": "integer",
354                    "example": 1
355                  },
356                  "KEY_VALUE_STORE_LISTS": {
357                    "type": "integer",
358                    "example": 0
359                  },
360                  "REQUEST_QUEUE_READS": {
361                    "type": "integer",
362                    "example": 0
363                  },
364                  "REQUEST_QUEUE_WRITES": {
365                    "type": "integer",
366                    "example": 0
367                  },
368                  "DATA_TRANSFER_INTERNAL_GBYTES": {
369                    "type": "integer",
370                    "example": 0
371                  },
372                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
373                    "type": "integer",
374                    "example": 0
375                  },
376                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
377                    "type": "integer",
378                    "example": 0
379                  },
380                  "PROXY_SERPS": {
381                    "type": "integer",
382                    "example": 0
383                  }
384                }
385              },
386              "usageTotalUsd": {
387                "type": "number",
388                "example": 0.00005
389              },
390              "usageUsd": {
391                "type": "object",
392                "properties": {
393                  "ACTOR_COMPUTE_UNITS": {
394                    "type": "integer",
395                    "example": 0
396                  },
397                  "DATASET_READS": {
398                    "type": "integer",
399                    "example": 0
400                  },
401                  "DATASET_WRITES": {
402                    "type": "integer",
403                    "example": 0
404                  },
405                  "KEY_VALUE_STORE_READS": {
406                    "type": "integer",
407                    "example": 0
408                  },
409                  "KEY_VALUE_STORE_WRITES": {
410                    "type": "number",
411                    "example": 0.00005
412                  },
413                  "KEY_VALUE_STORE_LISTS": {
414                    "type": "integer",
415                    "example": 0
416                  },
417                  "REQUEST_QUEUE_READS": {
418                    "type": "integer",
419                    "example": 0
420                  },
421                  "REQUEST_QUEUE_WRITES": {
422                    "type": "integer",
423                    "example": 0
424                  },
425                  "DATA_TRANSFER_INTERNAL_GBYTES": {
426                    "type": "integer",
427                    "example": 0
428                  },
429                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
430                    "type": "integer",
431                    "example": 0
432                  },
433                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
434                    "type": "integer",
435                    "example": 0
436                  },
437                  "PROXY_SERPS": {
438                    "type": "integer",
439                    "example": 0
440                  }
441                }
442              }
443            }
444          }
445        }
446      }
447    }
448  }
449}

Website Backup 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 Website Backup 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 Community

Actor Metrics

  • 5 monthly users

  • 3 bookmarks

  • >99% runs succeeded

  • Created in Jul 2020

  • Modified 4 years ago