***tl;dr:** For **select** attributes this cannot be declared directly in the initial `addAttribute()` call; two calls are required.* In order to set the default value, `eav_attribute.default`must be set with the primary key value from the `eav_attribute_option` table At a high level the need for two calls is apparent by looking at the flow and function of the `addAttribute()` and `addAttributeOption()` methods: 1. Prepare values 2. Insert/update into the `eav_attribute` table 3. Insert/update set/group 4. **Call `addAttributeOption()` to insert/update option values** The only hope then would be that `addAttributeOption()` will be able to update the `eav_attribute` record. However, there is no code which does this. The only tables accessed by this method are `eav_attribute_option` and `eav_attribute_option_value`. It is therefore necessary to call `getAttribute()` after the initial `addAttribute()` call, grab the attribute option ID and then call `updateAttribute()`. **Edit:** After the earlier answer I couldn't help but verify my answer against the existing code; after all, for `catalog_product` entities we have a nice MVC flow to follow thanks to the attribute CRUD GUI. And there it was, in `\Mage_Adminhtml_Catalog_Product_AttributeController::saveAction()`, that I saw the attribute model being set with the following data just before being saved: ![Option and option configuration data visualized with PhpStorm & Xdebug][1] Note that the attribute's `default` value has references to the `value` keys. Do a little digging and you end up at `\Mage_Eav_Model_Resource_Entity_Attribute::_saveOption()`, which is called from this resource's `_afterSave()` method - just as you'd expect given that we need to have an `eav_attribute` record to update. You can even see how multiselect and select defaults are handled in the same place, just before the final update: $bind = array('default_value' => implode(',', $attributeDefaultValue)); $where = array('attribute_id =?' => $object->getId()); $adapter->update($this->getMainTable(), $bind, $where); So, another alternative is to work directly with the resource model. [1]: https://i.sstatic.net/twNsA.png