If the timing is good. My old race car experience would say the intake gasket is leaking or you have a broken or bad intake valve spring. You can check some of the intake gasket with carb cleaner while its running and see if the idle changes, but if its leaking toward the inside you won't be able to spray it. I have even had to use 2 intake gaskets to seal it up especially if the heads or block had been milled a few times. Good luck.