{
  "name": "Apple reviews \u2014 evidence-based feature roadmap (manual)",
  "flow": [
    {
      "id": 1,
      "module": "apify:runActorNew",
      "version": 1,
      "parameters": {},
      "mapper": {
        "actor_search_type": "store",
        "actorId": "AH4m44VTv1oQTdoWe",
        "runSync": true,
        "timeout": 90,
        "maxTotalChargeUsd": 1,
        "inputBodyAH4m44VTv1oQTdoWe": "{\n  \"demoMode\": false,\n  \"sourceType\": \"app-store\",\n  \"appIds\": [\n    \"310633997\"\n  ],\n  \"country\": \"us\",\n  \"maxPages\": 1,\n  \"maxRecords\": 40,\n  \"maxInsights\": 10\n}"
      },
      "metadata": {
        "designer": {
          "x": 0,
          "y": 0,
          "name": "Run once \u2014 $1 maximum, 90 seconds"
        },
        "parameters": [
          {
            "name": "__IMTCONN__",
            "type": "account:apify2,apify",
            "label": "Connection",
            "required": true
          }
        ],
        "expect": [
          {
            "name": "actor_search_type",
            "type": "select",
            "label": "Search Actors from",
            "required": true,
            "validate": {
              "enum": [
                "user",
                "store"
              ]
            }
          },
          {
            "name": "runSync",
            "type": "boolean",
            "label": "Run synchronously",
            "required": true
          },
          {
            "name": "build",
            "type": "text",
            "label": "Build"
          },
          {
            "name": "timeout",
            "type": "uinteger",
            "label": "Timeout"
          },
          {
            "name": "memory",
            "type": "select",
            "label": "Memory",
            "validate": {
              "enum": [
                128,
                256,
                512,
                1024,
                2048,
                4096,
                8192,
                16384,
                32768
              ]
            }
          },
          {
            "name": "actorId",
            "type": "select",
            "label": "Actor",
            "required": true
          },
          {
            "name": "inputBodyAH4m44VTv1oQTdoWe",
            "type": "text",
            "label": "Input JSON",
            "required": true
          },
          {
            "name": "maxTotalChargeUsd",
            "type": "number",
            "label": "Maximum cost per run"
          },
          {
            "name": "maxItems",
            "type": "hidden",
            "label": "Maximum charged results"
          }
        ],
        "restore": {
          "expect": {
            "actor_search_type": {
              "label": "Apify Store"
            },
            "actorId": {
              "mode": "chose",
              "label": "technicaldost/app-review-feature-roadmap"
            },
            "runSync": {
              "mode": "chose"
            }
          }
        }
      },
      "onerror": [
        {
          "id": 101,
          "module": "builtin:Rollback",
          "version": 1,
          "parameters": {},
          "mapper": {},
          "metadata": {
            "designer": {
              "x": 300,
              "y": 300,
              "name": "Stop; do not retry paid start"
            }
          }
        }
      ]
    },
    {
      "id": 2,
      "module": "builtin:BasicRouter",
      "version": 1,
      "parameters": {},
      "mapper": null,
      "metadata": {
        "designer": {
          "x": 300,
          "y": 0,
          "name": "Require completed success"
        }
      },
      "routes": [
        {
          "flow": [
            {
              "id": 9,
              "module": "json:ParseJSON",
              "version": 1,
              "parameters": {},
              "mapper": {
                "json": "ACTOR_NOT_SUCCEEDED: status={{ifempty(1.status; \"MISSING\")}} run={{1.id}}. Inspect the existing run in Apify; do not automatically start another paid run."
              },
              "metadata": {
                "designer": {
                  "x": 600,
                  "y": 500,
                  "name": "ERROR \u2014 inspect run; no automatic retry"
                }
              },
              "onerror": [
                {
                  "id": 109,
                  "module": "builtin:Rollback",
                  "version": 1,
                  "parameters": {},
                  "mapper": {},
                  "metadata": {
                    "designer": {
                      "x": 900,
                      "y": 660,
                      "name": "Stop; do not retry paid start"
                    }
                  }
                }
              ],
              "filter": {
                "name": "Every other run status",
                "conditions": [
                  [
                    {
                      "a": "{{ifempty(1.status; \"MISSING\")}}",
                      "o": "text:notequal",
                      "b": "SUCCEEDED"
                    }
                  ]
                ]
              }
            }
          ]
        },
        {
          "flow": [
            {
              "id": 3,
              "module": "apify:fetchDatasetItems",
              "version": 1,
              "parameters": {},
              "mapper": {
                "datasetId": "{{1.defaultDatasetId}}",
                "type": "none",
                "format": "json",
                "limit": "2",
                "offset": "0"
              },
              "metadata": {
                "designer": {
                  "x": 600,
                  "y": 0,
                  "name": "Read bounded dataset"
                },
                "parameters": [
                  {
                    "name": "__IMTCONN__",
                    "type": "account:apify2,apify",
                    "label": "Connection",
                    "required": true
                  }
                ],
                "expect": [
                  {
                    "name": "datasetId",
                    "type": "text",
                    "label": "Dataset ID",
                    "required": true
                  },
                  {
                    "name": "type",
                    "type": "select",
                    "label": "Data transformation",
                    "required": true,
                    "validate": {
                      "enum": [
                        "clean",
                        "simplified",
                        "none"
                      ]
                    }
                  },
                  {
                    "name": "format",
                    "type": "select",
                    "label": "Format",
                    "required": true,
                    "validate": {
                      "enum": [
                        "json",
                        "csv",
                        "html",
                        "xml",
                        "rss",
                        "xlsx"
                      ]
                    }
                  },
                  {
                    "name": "limit",
                    "type": "uinteger",
                    "label": "Limit",
                    "validate": {
                      "max": 100000,
                      "min": 1
                    }
                  },
                  {
                    "name": "offset",
                    "type": "uinteger",
                    "label": "Offset",
                    "validate": {
                      "min": 0
                    }
                  },
                  {
                    "name": "fields",
                    "type": "text",
                    "label": "Fields"
                  },
                  {
                    "name": "omit",
                    "type": "text",
                    "label": "Omit Fields"
                  }
                ]
              },
              "filter": {
                "name": "Actor must have SUCCEEDED",
                "conditions": [
                  [
                    {
                      "a": "{{ifempty(1.status; \"MISSING\")}}",
                      "o": "text:equal",
                      "b": "SUCCEEDED"
                    }
                  ]
                ]
              },
              "onerror": [
                {
                  "id": 103,
                  "module": "builtin:Rollback",
                  "version": 1,
                  "parameters": {},
                  "mapper": {},
                  "metadata": {
                    "designer": {
                      "x": 900,
                      "y": -250,
                      "name": "Stop; do not retry paid start"
                    }
                  }
                }
              ]
            },
            {
              "id": 4,
              "module": "builtin:BasicAggregator",
              "version": 1,
              "parameters": {
                "feeder": 3
              },
              "mapper": {
                "recordType": "{{3.recordType}}",
                "schemaVersion": "{{3.schemaVersion}}",
                "title": "{{3.title}}",
                "mode": "{{3.mode}}",
                "demo": "{{3.demo}}",
                "createdAt": "{{3.createdAt}}",
                "analyzedRecords": "{{3.analyzedRecords}}",
                "insightCount": "{{3.insightCount}}",
                "summary": "{{3.summary}}",
                "insights": "{{3.insights}}",
                "provenance": "{{3.provenance}}",
                "billingEvent": "{{3.billingEvent}}",
                "reportStatus": "{{3.reportStatus}}"
              },
              "metadata": {
                "designer": {
                  "x": 900,
                  "y": 0,
                  "name": "Gather all rows before validation"
                },
                "restore": {
                  "extra": {
                    "feeder": {
                      "label": "Apify - Get Dataset Items [3]"
                    },
                    "target": {
                      "label": "Custom"
                    }
                  }
                }
              },
              "flags": {
                "stopIfEmpty": false
              }
            },
            {
              "id": 5,
              "module": "builtin:BasicRouter",
              "version": 1,
              "parameters": {},
              "mapper": null,
              "metadata": {
                "designer": {
                  "x": 1200,
                  "y": 0,
                  "name": "Validate dataset before output"
                }
              },
              "routes": [
                {
                  "flow": [
                    {
                      "id": 6,
                      "module": "json:ParseJSON",
                      "version": 1,
                      "parameters": {},
                      "mapper": {
                        "json": "APPLE_REPORT_ERROR: rows={{length(4.array)}} evidence_reports={{length(map(4.array; \"recordType\"; \"recordType\"; \"evidence_report\"))}}. Review dataset {{1.defaultDatasetId}}. No report delivered."
                      },
                      "metadata": {
                        "designer": {
                          "x": 1500,
                          "y": 300,
                          "name": "ERROR \u2014 inspect run; no automatic retry"
                        }
                      },
                      "onerror": [
                        {
                          "id": 106,
                          "module": "builtin:Rollback",
                          "version": 1,
                          "parameters": {},
                          "mapper": {},
                          "metadata": {
                            "designer": {
                              "x": 1800,
                              "y": 460,
                              "name": "Stop; do not retry paid start"
                            }
                          }
                        }
                      ],
                      "filter": {
                        "name": "Missing or unexpected report rows",
                        "conditions": [
                          [
                            {
                              "a": "{{length(4.array)}}",
                              "o": "number:less",
                              "b": "1"
                            }
                          ],
                          [
                            {
                              "a": "{{length(4.array)}}",
                              "o": "number:greater",
                              "b": "1"
                            }
                          ],
                          [
                            {
                              "a": "{{length(map(4.array; \"recordType\"; \"recordType\"; \"evidence_report\"))}}",
                              "o": "number:less",
                              "b": "1"
                            }
                          ],
                          [
                            {
                              "a": "{{length(map(4.array; \"recordType\"; \"recordType\"; \"evidence_report\"))}}",
                              "o": "number:greater",
                              "b": "1"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                },
                {
                  "flow": [
                    {
                      "id": 7,
                      "module": "util:SetVariable2",
                      "version": 1,
                      "parameters": {},
                      "mapper": {
                        "name": "report",
                        "scope": "roundtrip",
                        "value": "{{first(4.array)}}"
                      },
                      "metadata": {
                        "designer": {
                          "x": 1500,
                          "y": 0,
                          "name": "Output: report"
                        },
                        "interface": [
                          {
                            "name": "report",
                            "type": "any",
                            "label": "report"
                          }
                        ]
                      },
                      "filter": {
                        "name": "Exactly one evidence report",
                        "conditions": [
                          [
                            {
                              "a": "{{length(4.array)}}",
                              "o": "number:equal",
                              "b": "1"
                            },
                            {
                              "a": "{{length(map(4.array; \"recordType\"; \"recordType\"; \"evidence_report\"))}}",
                              "o": "number:equal",
                              "b": "1"
                            }
                          ]
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "metadata": {
    "instant": false,
    "version": 1,
    "scenario": {
      "roundtrips": 1,
      "maxErrors": 1,
      "autoCommit": true,
      "autoCommitTriggerLast": true,
      "sequential": true,
      "slots": null,
      "confidential": false,
      "dataloss": false,
      "dlq": false,
      "freshVariables": false
    },
    "designer": {
      "orphans": []
    },
    "notes": []
  }
}
