{
  "openapi": "3.0.1",
  "info": {
    "title": "Merge, Dedupe & Transform Datasets: Filter, JSON to CSV",
    "description": "Merge one or more Apify datasets, pasted JSON or a JSON, JSONL or CSV file URL: remove duplicates by any field, filter rows, flatten nested JSON, pick and rename fields, sort and export CSV. Runs with limited permissions. $0.50 per 1,000 output rows; dropped rows are free.",
    "version": "0.0",
    "x-build-id": "h1yryN9nwzQpbRV4w"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/chris_elder~dataset-transformer/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-chris_elder-dataset-transformer",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/chris_elder~dataset-transformer/runs": {
      "post": {
        "operationId": "runs-sync-chris_elder-dataset-transformer",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/chris_elder~dataset-transformer/run-sync": {
      "post": {
        "operationId": "run-sync-chris_elder-dataset-transformer",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "title": "Items (JSON array)",
            "type": "array",
            "description": "Paste rows directly as a JSON array. If you also give a dataset or a file URL, all rows are merged. (The sample rows shown here are ignored automatically when you add a dataset or file.)"
          },
          "datasetId": {
            "title": "Apify dataset ID",
            "type": "string",
            "description": "Read rows from an existing Apify dataset (same account or shared). Read-only access to this one dataset is requested. To merge several datasets, use \"Merge several datasets\" below."
          },
          "datasetIds": {
            "title": "Merge several datasets (IDs)",
            "maxItems": 50,
            "type": "array",
            "description": "Add two or more Apify dataset IDs to merge them into one output, in the order given (for example the runs of several scrapers, or yesterday's and today's run). Combine with \"Dedupe by fields\" to keep only unique rows. Read-only access to each dataset is requested. Rows from all sources you fill in (pasted items, datasets, file URL) are merged."
          },
          "sourceField": {
            "title": "Add source field",
            "type": "string",
            "description": "Optional. Name of a field to add to each row with where it came from (the dataset ID, \"items\" or \"fileUrl\"). Handy after a merge. Leave empty to skip."
          },
          "fileUrl": {
            "title": "File URL (JSON / JSONL / CSV)",
            "type": "string",
            "description": "http(s) URL of a JSON array, JSONL or CSV file to transform."
          },
          "filters": {
            "title": "Filters",
            "type": "array",
            "description": "Keep rows matching these rules. Ops: eq, ne, gt, gte, lt, lte, contains, notContains, startsWith, endsWith, exists, notExists, in, regex. Dot paths supported (meta.city)."
          },
          "filterMode": {
            "title": "Filter mode",
            "enum": [
              "and",
              "or"
            ],
            "type": "string",
            "description": "Combine filters with AND or OR.",
            "default": "and"
          },
          "dedupeBy": {
            "title": "Dedupe by fields",
            "type": "array",
            "description": "Field names (dot paths OK). First occurrence kept.",
            "items": {
              "type": "string"
            }
          },
          "flatten": {
            "title": "Flatten nested objects",
            "type": "boolean",
            "description": "Turn { meta: { city } } into { \"meta.city\": ... }.",
            "default": true
          },
          "pick": {
            "title": "Pick fields only",
            "type": "array",
            "description": "If set, keep only these fields (after flatten).",
            "items": {
              "type": "string"
            }
          },
          "omit": {
            "title": "Omit fields",
            "type": "array",
            "description": "Drop these fields (ignored when pick is set).",
            "items": {
              "type": "string"
            }
          },
          "rename": {
            "title": "Rename map",
            "type": "object",
            "description": "Map of oldField → newField."
          },
          "sortBy": {
            "title": "Sort by field",
            "type": "string",
            "description": "Field name to sort by (dot paths OK)."
          },
          "sortDir": {
            "title": "Sort direction",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Ascending or descending sort.",
            "default": "desc"
          },
          "maxRows": {
            "title": "Max output rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "maxRows",
            "default": 10000
          },
          "exportCsv": {
            "title": "Also export CSV to Key-Value store",
            "type": "boolean",
            "description": "When true, also write OUTPUT.csv to the Key-Value store.",
            "default": true
          },
          "csvKey": {
            "title": "CSV key name",
            "type": "string",
            "description": "Key for the CSV record in the default Key-Value store.",
            "default": "OUTPUT.csv"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}