It's a rather extensive process to do this, but here's a trimmed down version of the code that I generally use. I won't necessarily guarantee that it will run as shown since I ripped out a bunch of internal stuff that we do along the way, but these are the pieces you need to do it. You'll need to look at tables `#__categories` and `#__content` to get all the fields you want to populate and add them to the given `$category_data` and `$article_data` arrays. I should mention that you *could* accomplish it inserting the records with jDatabase or jTable, but I'd not generally recommend that because the important thing that you'd be missing is the built-in Joomla rules and logic that do things like checking the uniqueness of the alias, and managing the ACL for the new content items. if (!defined('_JEXEC')) { define( '_JEXEC', 1 ); define('JPATH_BASE', realpath(dirname(__FILE__))); require_once ( JPATH_BASE .'/includes/defines.php' ); require_once ( JPATH_BASE .'/includes/framework.php' ); defined('DS') or define('DS', DIRECTORY_SEPARATOR); } $app = JFactory::getApplication('site'); $category_data['id'] = 0; $category_data['parent_id'] = 0; $category_data['title'] = 'My Category Title'; $category_data['alias'] = 'my-categegory-title-alias'; $category_data['extension'] = 'com_content'; $category_data['published'] = 1; $category_data['language'] = '*'; $category_data['params'] = array('category_layout' => '','image' => ''); $category_data['metadata'] = array('author' => '','robots' => ''); $category_id = createCategory($category_data); if(!$category_id){ echo "Category create failed!"; }else{ $article_data = array( 'id' => 0, 'catid' => $category_id, 'title' => 'My article title', 'alias' => 'my-article-alias', 'introtext' => 'My intro text', 'fulltext' => '<p>My full text</p>', 'state' => 1, 'language' => '*' ); $article_id = createArticle($article_data); if(!$article_id){ echo "Article create failed!"; } } function createCategory( $data ) { $data['rules'] = array( 'core.edit.state' => array(), 'core.edit.delete' => array(), 'core.edit.edit' => array(), 'core.edit.state' => array(), 'core.edit.own' => array(1=>true) ); $basePath = JPATH_ADMINISTRATOR.'/components/com_categories'; require_once $basePath.'/models/category.php'; $config = array('table_path' => $basePath.'/tables'); $category_model = new CategoriesModelCategory($config); if(!$category_model->save($data)){ $err_msg = $category_model->getError(); return false; }else{ $id = $category_model->getItem()->id; return $id; } } function createArticle($data) { $data['rules'] = array( 'core.edit.delete' => array(), 'core.edit.edit' => array(), 'core.edit.state' => array(), ); $basePath = JPATH_ADMINISTRATOR.'/components/com_content'; require_once $basePath.'/models/article.php'; $config = array(); $article_model = new ContentModelArticle($config); if(!$article_model->save($data)){ $err_msg = $article_model->getError(); return false; }else{ $id = $article_model->getItem()->id; return $id; } }