# Bulk campaign URL QA from CSV

**Use case:** 

Bulk audit media-plan URLs from CSV for redirect chains, UTM preservation, HTTPS, status codes, and final hosts.

## Input

```json
{
  "startUrls": [
    {
      "url": "https://example.com/?utm_source=partner&utm_medium=affiliate"
    }
  ],
  "csvText": "url,expectedFinalHost,utm_source,utm_medium\nhttps://example.com/?utm_source=partner&utm_medium=affiliate,example.com,partner,affiliate",
  "expectedUtmParams": {
    "utm_source": "newsletter",
    "utm_medium": "email"
  },
  "expectedFinalHost": "example.com",
  "allowedExtraParams": [],
  "requireHttps": true,
  "includeHtmlSignals": false,
  "requestMethod": "HEAD_THEN_GET",
  "maxRedirects": 10,
  "timeoutSecs": 20,
  "concurrency": 5,
  "maxItems": 100
}
```

## Output

```json
{
  "inputUrl": {
    "label": "Input URL"
  },
  "finalUrl": {
    "label": "Final URL"
  },
  "finalStatus": {
    "label": "Final status"
  },
  "ok": {
    "label": "OK"
  },
  "hopCount": {
    "label": "Redirect hops"
  },
  "totalMs": {
    "label": "Total ms"
  },
  "httpsOk": {
    "label": "HTTPS OK"
  },
  "finalHost": {
    "label": "Final host"
  },
  "finalHostMatchesExpected": {
    "label": "Host match"
  },
  "utmOk": {
    "label": "UTM OK"
  },
  "missingParams": {
    "label": "Missing UTM"
  },
  "changedParams": {
    "label": "Changed UTM"
  },
  "extraParams": {
    "label": "Extra UTM"
  },
  "error": {
    "label": "Error"
  },
  "checkedAt": {
    "label": "Checked at"
  }
}
```

## About this Actor

This example demonstrates how to use [UTM Campaign URL QA Auditor](https://apify.com/automation-lab/utm-campaign-url-qa-auditor) with a specific input configuration. Visit the [Actor detail page](https://apify.com/automation-lab/utm-campaign-url-qa-auditor) to learn more, explore other use cases, and run it yourself.