I have a python script which hits dozens of API endpoints every 10s to write climate data to a database. Lets say on average I insert 1,500 rows every 10 seconds, from 10 different threads. 
I am thinking of making a batch system whereby the insert queries aren't written to the db as they come in, but added to a waiting list and this list is inserted in batch when it reaches a certain size, and the list of course emptied.

Is this justified due to the overhead with frequently writing small numbers of rows to the db?
If so, would a list be wise? I am worried about if my program terminates unexpectedly, perhaps a form of serialized data would be better?
150 inserts per second can be a load on a database and can affect performance.  There are pros and cons to changing the approach that you have.  Here are some things to consider:

Databases implement ACID, so inserts are secure.  This is harder to achieve with buffering schemes.
How important is up-to-date information for queries?
What is the query load?
insert is pretty simple.  Alternative mechanisms may require re-inventing the wheel.
Do you have other requirements on the inserts, such as ensuring they are in particular order?

No doubt, there are other considerations.
Here are some possible alternative approaches:

If recent data is not a concern, snapshot the database for querying purposes -- say once per day or once per hour.
Batch inserts in the application threads.  A single insert can insert multiple rows.
Invest in larger hardware.  An insert load that slows down a single processor may have little effect on a a larger machine.
Invest in better hardware.  More memory and faster disk (particularly solid state) and have a big impact.

No doubt, there are other approaches as well.
Overhead on an SQL insert significant?