I'm afraid the part about it needing to be in the US means I'm out of knowledge. Through my professors, I know a bit about the best and... Least best... Places to go, but only over here in Europe.
What I can do however, is give you some general pointers when looking for companies like this.
1) Examine their prior work if it is available to you. If they have nothing they can show you, at least if requested, it's probably a bad sign.
2) If you get in contact with a company, make sure they understand that you will be looking at maintainability. A lot of companies hired to produce an app or similar in a freelance kind of way, will do what needs to be done to get it working, but write it in such a way that would make an update changing things, adding features or fixing a bug very difficult, maybe even requiring reworking of everything.
3) Make sure they write a lot of test code. Preferably even run a TDD oriented business, again ensuring you can get work done on the app down the road by them again or even a different company without worrying it'll break everything. If not strictly TDD (which is kinda rare still), at least that they have high code coverage by tests when developing.
4) Make sure you own the code, not just the final product. However, I would recommend also explicitly allowing them to license libraries or using, where legal for the purposes you lay out, open source code. This might be an expense, but it might in the end actually a saving, since the library would be maintained and tested thoroughly under many conditions, and save time and development cost for your contractor as well as potential bugs in the app that you'd then need fixed later.
One of my professors works as a consultant for code companies. One of the biggest problem they face is often that their code is written in such a way that adding just one extra feature grows exponentially more difficult and cumbersome with every feature. Every bug fix becomes a bigger hassle. Often this is even intentional. If the code was written by one contractor, who just needed to get the job done to get paid, they might not care how easy or difficult the code is to work with later on. If an extra feature needs to be added in a few months or a year, and it takes 6 weeks instead of 2, it's also just more time they can get paid for. Pass that code onto a new contractor and they'll be completely lost because the code is such a big mess - That's where the professor I mentioned would come in.
Point of that story; Just attempt to avoid getting that kind of development house
Maybe if you get in talks with one, hiring a consultant to estimate if the code house would be good to work with could potentially be a good strategy. If they're willing/legally able to give code examples of past work and not just show products, having someone look through it to estimate the way they work again might be beneficial.
And finally, I just want to add; Communication is key. Make sure to get one that communicates well. They need to speak your language (and I don't just mean that in the literal sense), and both sides need to engage. It's not just you telling them what you want (though you should be clear about exactly what you want and what you don't). A good code house will also engage in the conversation, like "That can be done, but if the UI is allowed to look this slightly slightly different way instead, we can save about a month and a lot of costs with a native framework" for example. They're the expert about what it takes to do everything technically, you're an expert on what you want. Use each others' expertise to evaluate what is best to do.