So two things.
#1, my preferred method these days, is to use JLCPCB's SMT assembly service. The big downside there is they only do single sided assembly and you have to choose components from their predefined (but fairly vast) component library. They'll make your boards using the standard drop a .zip of your gerbers into their website type process, then you just check the box for enabling SMT assembly. From there you include 2 additional files. One is a pick and place data file, the other is a BOM. The formats for both of these files, as well as instructions for exporting specifically the pick and place files from various PCB design softwares are provided on their website. There are also a ton of youtube videos on it. If you mess it up they'll email you and tell you how to fix it. I usually only have a couple components to hand solder that they don't have in their library, but almost all jellybean stuff is there. For reference I just got 5 four layer boards completely assembled and shipped with like a 1.5 week lead time for 37 bucks. Those boards have like 11 IC's and about 90 components total for scale. You really can't beat that. They can do higher layer boards as well, you just pay more for it.
#2, have you experimented with ordering a stencil along with you PCB, placing the components by hand, and reflowing the board in your toaster oven? That was my old favorite way to do things. Probably cuts assembly time down by 4 or 5x VS hand soldering. You can do 2 sided boards this way too if you're careful about things.
At work we have boards assembled by a variety of different board houses, but the prices there come out at like 100-500 dollars a board with like a week lead time of course depending on a lot of factors, so if you got that kind of dough there are plenty of stateside options, but I don't see the point in that for personal projects...