All three of these words mean "to start", but what's the difference between them and where are they used?
始まる is an intransitive verb. Hence, it does not have a direct object, ex "Something starts ".
始める is a transitive verb. Hence, it has a direct object, ex "Someone starts something".
開始 is a noun. You can make it into a verb by adding suru.
This is an extension of Dono's response.
開始 contains two kanji, 開く meaning to open and 始まる／める which we know from Dono means begin. Not surprisingly, 開始 can take on either single character in certain circumstances. To demonstrate this I have posted some examples of how 開始 gets used as a verb with する from the Apple dictionary below. In general compound verbs like this get used in more formal/written Japanese.
Note: I agree with Taylor's comment, fair question but if this is the first time you have come across this kind of thing then I should take this as one example and get ready for lots more cases like this or other variations.
かいし【開始】:(an) opening; a beginning; commencement
開始する｜begin; start; ｟文語｠ commence
この支店は4月10日から業務を開始する｜This branch (office) will [open for / start] business on April 10.
試合開始のサイレンが鳴った｜A siren sounded to announce the beginning of the game.
攻撃を開始する｜launch [open] an attack ｟on the enemy｠
委員会はその件の調査を開始した｜The committee opened [launched] an investigation of the matter.
いよいよ行動開始の時だ｜Now we must go into action.
昨日両都市間のバス運行が開始された｜Bus service between the two cities was inaugurated yesterday.
日本とアメリカは明日交渉を開始する｜Japan and the U.S. open [enter into] negotiations tomorrow.