{
  "candidates": [
    {
      "ballot_status": "certified",
      "party": "Democratic",
      "person": "steve-dettelbach",
      "running_mate": null
    },
    {
      "ballot_status": "certified",
      "party": "Republican",
      "person": "dave-yost",
      "running_mate": null
    }
  ],
  "cycle": 2018,
  "date": "2018-11-06",
  "district": null,
  "id": "2018-attorney-general",
  "notes": "P3-03. Candidates with a page are listed alphabetically by surname (N-5); Ohio rotates ballot order by precinct. A genuine donor-depth asymmetry from the 2022 wave does not recur here -- both candidates have several named donors and a comparable finance picture, though neither side's full-cycle total could be pinned to one authoritative figure (see design/reports/politics/P3-03-2018.md).",
  "office": "Attorney General of Ohio",
  "office_slug": "attorney-general",
  "research_ref": [
    "cracked-buckeye-political@fd5d3268debbf1dd04f9a82173ec73e556cc2981:data/candidates-2018/dave-yost.md",
    "cracked-buckeye-political@fd5d3268debbf1dd04f9a82173ec73e556cc2981:data/candidates-2018/steve-dettelbach.md",
    "cracked-buckeye-political@fd5d3268debbf1dd04f9a82173ec73e556cc2981:data/candidates-2018/README.md"
  ],
  "result": {
    "certified": "2018-12",
    "sources": [
      "https://en.wikipedia.org/wiki/2018_Ohio_Attorney_General_election"
    ],
    "totals": [
      {
        "pct": 52.17,
        "person": "dave-yost",
        "votes": 2276414
      },
      {
        "pct": 47.83,
        "person": "steve-dettelbach",
        "votes": 2086715
      }
    ],
    "turnout": null,
    "winner": "dave-yost"
  },
  "sources": [
    {
      "accessed": "2026-09-19",
      "publisher": "Wikipedia",
      "title": "2018 Ohio Attorney General election",
      "url": "https://en.wikipedia.org/wiki/2018_Ohio_Attorney_General_election"
    },
    {
      "accessed": "2026-09-19",
      "publisher": "Ballotpedia",
      "title": "Ohio Attorney General election, 2018",
      "url": "https://ballotpedia.org/Ohio_Attorney_General_election,_2018"
    }
  ],
  "type": "race",
  "unpaged_candidates": [],
  "updated": "2026-09-19",
  "symmetry": {
    "ratio": 2.0,
    "candidates": [
      {
        "person": "steve-dettelbach",
        "name": "Steve Dettelbach",
        "counts": {
          "finance": 1,
          "donors": 2,
          "outside_spending": 0,
          "polling": 1,
          "candidacies": 1,
          "claims": 1,
          "ballot": 0,
          "money": 3,
          "elections": 1
        },
        "whole_counts": {
          "positions": 2,
          "record": 2,
          "net_worth": 0,
          "interests": 1,
          "endorsements_given": 0,
          "endorsements_received": 0,
          "offices": 2,
          "sources": 10,
          "profile": 4,
          "endorsements": 0
        },
        "all_counts": {
          "positions": 2,
          "record": 2,
          "finance": 1,
          "donors": 2,
          "outside_spending": 0,
          "net_worth": 0,
          "interests": 1,
          "polling": 1,
          "candidacies": 1,
          "endorsements_given": 0,
          "endorsements_received": 0,
          "offices": 2,
          "sources": 10,
          "claims": 1,
          "profile": 4,
          "ballot": 0,
          "money": 3,
          "elections": 1,
          "endorsements": 0
        }
      },
      {
        "person": "dave-yost",
        "name": "Dave Yost",
        "counts": {
          "finance": 1,
          "donors": 2,
          "outside_spending": 0,
          "polling": 1,
          "candidacies": 1,
          "claims": 1,
          "ballot": 0,
          "money": 3,
          "elections": 1
        },
        "whole_counts": {
          "positions": 6,
          "record": 9,
          "net_worth": 0,
          "interests": 3,
          "endorsements_given": 0,
          "endorsements_received": 0,
          "offices": 5,
          "sources": 30,
          "profile": 7,
          "endorsements": 0
        },
        "all_counts": {
          "positions": 6,
          "record": 9,
          "finance": 1,
          "donors": 2,
          "outside_spending": 0,
          "net_worth": 0,
          "interests": 3,
          "polling": 1,
          "candidacies": 1,
          "endorsements_given": 0,
          "endorsements_received": 0,
          "offices": 5,
          "sources": 30,
          "claims": 1,
          "profile": 7,
          "ballot": 0,
          "money": 3,
          "elections": 1,
          "endorsements": 0
        }
      }
    ],
    "per_race": {
      "sections": {
        "ballot": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "candidacies": {
          "max": 1,
          "min": 1,
          "ratio": 1.0,
          "skewed": false
        },
        "claims": {
          "max": 1,
          "min": 1,
          "ratio": 1.0,
          "skewed": false
        },
        "donors": {
          "max": 2,
          "min": 2,
          "ratio": 1.0,
          "skewed": false
        },
        "elections": {
          "max": 1,
          "min": 1,
          "ratio": 1.0,
          "skewed": false
        },
        "finance": {
          "max": 1,
          "min": 1,
          "ratio": 1.0,
          "skewed": false
        },
        "money": {
          "max": 3,
          "min": 3,
          "ratio": 1.0,
          "skewed": false
        },
        "outside_spending": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "polling": {
          "max": 1,
          "min": 1,
          "ratio": 1.0,
          "skewed": false
        }
      },
      "skewed": [],
      "notes": []
    },
    "whole_record": {
      "sections": {
        "endorsements": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "endorsements_given": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "endorsements_received": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "interests": {
          "max": 3,
          "min": 1,
          "ratio": 3.0,
          "skewed": true
        },
        "net_worth": {
          "max": 0,
          "min": 0,
          "ratio": null,
          "skewed": false
        },
        "offices": {
          "max": 5,
          "min": 2,
          "ratio": 2.5,
          "skewed": true
        },
        "positions": {
          "max": 6,
          "min": 2,
          "ratio": 3.0,
          "skewed": true
        },
        "profile": {
          "max": 7,
          "min": 4,
          "ratio": 1.75,
          "skewed": false
        },
        "record": {
          "max": 9,
          "min": 2,
          "ratio": 4.5,
          "skewed": true
        },
        "sources": {
          "max": 30,
          "min": 10,
          "ratio": 3.0,
          "skewed": true
        }
      },
      "skewed": [
        "positions",
        "record",
        "sources"
      ],
      "notes": [
        "Where they stand, across every cycle: 6 for Dave Yost, 2 for Steve Dettelbach. The gap is in our research, not in them.",
        "Record in office, across every cycle: 9 for Dave Yost, 2 for Steve Dettelbach. The gap is in our research, not in them.",
        "Sources, across every cycle: 30 for Dave Yost, 10 for Steve Dettelbach. The gap is in our research, not in them."
      ]
    },
    "sections": {
      "endorsements": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "endorsements_given": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "endorsements_received": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "interests": {
        "max": 3,
        "min": 1,
        "ratio": 3.0,
        "skewed": true
      },
      "net_worth": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "offices": {
        "max": 5,
        "min": 2,
        "ratio": 2.5,
        "skewed": true
      },
      "positions": {
        "max": 6,
        "min": 2,
        "ratio": 3.0,
        "skewed": true
      },
      "profile": {
        "max": 7,
        "min": 4,
        "ratio": 1.75,
        "skewed": false
      },
      "record": {
        "max": 9,
        "min": 2,
        "ratio": 4.5,
        "skewed": true
      },
      "sources": {
        "max": 30,
        "min": 10,
        "ratio": 3.0,
        "skewed": true
      },
      "ballot": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "candidacies": {
        "max": 1,
        "min": 1,
        "ratio": 1.0,
        "skewed": false
      },
      "claims": {
        "max": 1,
        "min": 1,
        "ratio": 1.0,
        "skewed": false
      },
      "donors": {
        "max": 2,
        "min": 2,
        "ratio": 1.0,
        "skewed": false
      },
      "elections": {
        "max": 1,
        "min": 1,
        "ratio": 1.0,
        "skewed": false
      },
      "finance": {
        "max": 1,
        "min": 1,
        "ratio": 1.0,
        "skewed": false
      },
      "money": {
        "max": 3,
        "min": 3,
        "ratio": 1.0,
        "skewed": false
      },
      "outside_spending": {
        "max": 0,
        "min": 0,
        "ratio": null,
        "skewed": false
      },
      "polling": {
        "max": 1,
        "min": 1,
        "ratio": 1.0,
        "skewed": false
      }
    },
    "skewed": [
      "positions",
      "record",
      "sources"
    ],
    "race": "2018-attorney-general",
    "notes": [
      "Where they stand, across every cycle: 6 for Dave Yost, 2 for Steve Dettelbach. The gap is in our research, not in them.",
      "Record in office, across every cycle: 9 for Dave Yost, 2 for Steve Dettelbach. The gap is in our research, not in them.",
      "Sources, across every cycle: 30 for Dave Yost, 10 for Steve Dettelbach. The gap is in our research, not in them."
    ]
  },
  "candidate_links": [
    {
      "person": "steve-dettelbach",
      "name": null,
      "url": "https://crackedbuckeye.com/people/steve-dettelbach/",
      "api": "https://crackedbuckeye.com/api/politics/people/steve-dettelbach.json"
    },
    {
      "person": "dave-yost",
      "name": null,
      "url": "https://crackedbuckeye.com/people/dave-yost/",
      "api": "https://crackedbuckeye.com/api/politics/people/dave-yost.json"
    }
  ],
  "claims": [
    "2018-10-17-steve-dettelbach-ecot-200-million-stolen",
    "2018-10-17-dave-yost-dettelbach-endo-pharmaceuticals"
  ],
  "_meta": {
    "generated": "2026-09-19",
    "license": "CC BY 4.0 for the compilation; each source keeps its own terms",
    "cite": "Cracked Buckeye (Open Shower Co), \"Attorney General of Ohio, 2018\", https://crackedbuckeye.com/election/2018/attorney-general/, built 2026-09-19, accessed [date].",
    "schema": "https://crackedbuckeye.com/api/politics/schema.json",
    "url": "https://crackedbuckeye.com/election/2018/attorney-general/",
    "api": "https://crackedbuckeye.com/api/politics/races/2018-attorney-general.json"
  },
  "cite": "Cracked Buckeye (Open Shower Co), \"Attorney General of Ohio, 2018\", https://crackedbuckeye.com/election/2018/attorney-general/, built 2026-09-19, accessed [date].",
  "url": "https://crackedbuckeye.com/election/2018/attorney-general/",
  "api": "https://crackedbuckeye.com/api/politics/races/2018-attorney-general.json",
  "license": "CC BY 4.0 for the compilation; each source keeps its own terms",
  "generated": "2026-09-19",
  "schema": "https://crackedbuckeye.com/api/politics/schema.json"
}
